我遇到了一个很大的问题,我不确定这只是一个代码设计问题,还是我试图做一些毫无意义的事情。
我已使用护照进行本地注册进行身份验证,并使用JWT进行路由访问和权限。我将令牌发送到前端并使用AngularJS将其保存到LocalStorage。
那里的一切都有效并且有意义。但是通过Twitter,我无法弄清楚如何实现相同的策略来让用户登录。
我在Twitter方面设置了所有内容,使用护照进行登录和注册。但我不知道如何将令牌发送到前端,因为我只能使用GET请求从Twitter API接收信息。
我重定向到Twitter登录,重定向到回调网址。但那后呢?我有一些相关的代码只返回JWT。我要问的是如何以尽可能最好的方式将其传递给Angular?
路线:
app.get('/login/twitter', passport.authenticate('twitter'));
app.get('/login/twitter/callback', function(req, res) {
passport.authenticate('twitter' , function(err, user, info) {
if(err) {
res.json({
'message': err
});
}
var token;
token = user.generateJwt();
res.status(200);
res.json({
"token" : token
});
})(req, res);
});
护照:
passport.use(new TwitterStrategy({consumerKey: auth.twitterAuth.consumerKey, consumerSecret: auth.twitterAuth.consumerSecret, callbackURL: auth.twitterAuth.callbackURL}, function(req, key, keySecret, profile, done) {
User.findOne({'twitter.id' : profile.id}, function(err, user) {
if(err) {
return done(err);
}
if(user) {
if(!user.twitter.token) {
user.twitter.token = key;
user.twitter.username = profile.username;
user.twitter.displayName = profile.displayName;
user.save(function(err) {
if(err) {
res.json({
'message': err
});
}
return done(null, user);
});
}
return done(null, user);
}
let newUser = new User();
newUser.twitter.id = profile.id;
newUser.twitter.token = key;
newUser.twitter.username = profile.username;
newUser.twitter.displayName = profile.displayName;
newUser.twitter.registerDate = Date.now();
newUser.save(function(err) {
if(err) {
res.json({
'message': err
});
}
return done(null, newUser);
});
});
}));
答案 0 :(得分:0)
根据我的经验,执行此操作的最佳方法是将要存储在JWT中的信息传递到url,并将令牌存储在回调页面上的localStorage中。用户标识符存储在浏览器中后,请重定向到所需页面。