【问题标题】:Save accessToken to local storage using passport-facebook使用 passport-facebook 将 accessToken 保存到本地存储
【发布时间】:2016-01-28 20:00:52
【问题描述】:

我是 MEAN Stack 的新手,我无法将 passport-facebook accessToken 保存到 localStorage。我该怎么做呢?以下是我的设置。

 passport.use(new FacebookStrategy({
        clientID: passport_config.facebook.clientID,
        clientSecret: passport_config.facebook.clientSecret,
        callbackURL: passport_config.facebook.callbackURL
      },
      function(accessToken, refreshToken, profile, done) {
        FBAccount.findOne({fbId : profile.id}, function(err, oldUser){
            if(oldUser){
                done(null,oldUser);
            }else{
                var newUser = new FBAccount({
                    fbId  : profile.id ,
                    name  : profile.displayName
                }).save(function(err,newUser){
                    if(err) throw err;
                    console.log(newUser);
                    done(null, newUser);
                });
            }
        });
      }
    ));

【问题讨论】:

    标签: node.js passport-facebook passport.js


    【解决方案1】:

    试试这个

    var localStorage = require('localStorage')
    
    localStorage.setItem('accessToken', accessToken);
    FBAccount.findOne({ ....
    

    【讨论】:

    • 您好,感谢您的解决方案。我添加了本地存储并放置了您建议的代码。但是,当我查看我的本地存储时,它并不存在。不过,我能够通过控制台记录我的 accessToken。
    • 您是否使用localStorage.getItem('accessToken') 进行检查?它将保存在节点服务器上,而不是浏览器上。但是要处理会话,您应该使用 Redis
    • 我明白了,是的,我现在能够看到它。谢谢。我可能要求太多,但如何在浏览器上将其设置为 localstorage?
    • 可以通过res返回accessToken,然后一个html文件,用js保存到localstoragelocalStorage.setItem('accessToken', accessToken)
    • 查看如何使用 Redis 处理 express+passport 的 session here
    【解决方案2】:

    您也可以通过一些中间件在cookie中添加令牌

    passport.use(new FacebookStrategy({
       clientID: '566950043453498',
       clientSecret: '555022a61da40afc8ead59c6c26306ed',
       callbackURL: 'http://www.localhost:3000/auth/facebook/callback'
    }, function(accessToken, refreshToken, profile, done) {
        console.log("hello " + profile.displayName);
        done(null); 
     }
    ));
    
    //Authentication
    app.get('/auth/facebook', passport.authenticate('facebook'));
    
    router.get('/auth/facebook/callback', passport.authenticate('facebook', {
        failureRedirect: '/login?failedSocial=facebook'
      }), auth.authCallback);
    

    并且在身份验证服务中

    exports.authCallback = function (req, res) {
        res.res.cookie('token', JSON.stringify(req.user.token));
        res.redirect('/');
    }
    

    【讨论】:

    • 这是正确的,除了 req.user.token 应该是 req.query.code
    猜你喜欢
    • 2018-11-05
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 2014-07-07
    • 2022-01-23
    • 2018-11-20
    • 2017-09-22
    相关资源
    最近更新 更多