如何从Passport.js在Localstorage中存储令牌

时间:2017-09-27 15:55:34

标签: node.js angular express

我正在尝试将来自passport.js的jwt令牌存储在浏览器localStorage中,因为从服务器生成令牌,我遇到了从服务器到客户端的通信问题。

我将非常感谢有关如何在客户端浏览器localStorage上设置服务器生成的令牌的任何帮助。

路线

  // Setting the github oauth routes
  app.get('/auth/github', passport.authenticate('github', {
    failureRedirect: '/signin'
  }), authCallback);

  app.get('/auth/github/callback', passport.authenticate('github', {
    failureRedirect: '/signin'
  }), authCallback);

passport.js

  passport.use(new GitHubStrategy(
    {
  clientID: process.env.GITHUB_CLIENT_ID || config.github.clientID,
  clientSecret: process.env.GITHUB_CLIENT_SECRET || config.github.clientSecret,
  callbackURL: config.github.callbackURL
},
((accessToken, refreshToken, profile, done) => {
  User.findOne({
    'github.id': profile.id
  }, (err, user) => {
    if (err) {
      return done(err);
    }
    if (!user) {
      user = new User({
        name: profile.displayName,
        username: profile.username,
        provider: 'github',
        github: profile._json
      });
      user.save(() => done(err, user));
    } else {
      return done(err, user);
       }
      });
    })
  ));

AuthCallBack

export const authCallback = (req, res) => {
  const { TOKEN_SECRET } = process.env;
  if (!req.user) {
    res.redirect('/#!/signin?error=emailRequired');
  } else {
    const token = jwt.sign(
      { user: req.user.id, name: req.user.name },
      TOKEN_SECRET,
      { expiresIn: 72 * 60 * 60 }
    );
    // window.localStorage.setItem('token', token);
    res.redirect('/#!/app');
  }
};

我将非常感谢在我的浏览器localStorage中存储来自authCallBack的令牌的任何帮助。

1 个答案:

答案 0 :(得分:2)

我必须通过在浏览器cookie中设置数据然后在客户端检索存储的数据然后将数据存储在浏览器localStorage中来解决这个问题。