Angular 2身份验证 - 存储使用的passportjs令牌

Angular 2身份验证 - 存储使用的passportjs令牌

问题描述:

将用户重定向到Facebook进行登录,然后创建用户,将它们存储在我的数据库中并重定向到/ auth/facebook/callback后,以下快速代码会返回令牌。我如何使用callbacks/promises/observables /获取此令牌?在我的前端客户端中,并将其作为用户浏览器中的本地窗口变量存储在角度2身份验证服务中以供会话期间使用?Angular 2身份验证 - 存储使用的passportjs令牌

userRouter.get('/auth/facebook/callback', function(req,res,next){ 
    passport.authenticate('facebook', function(err, user, info) {   
    if (err) { 
     return next(err); 
    } 
    if (!user) { 
     return res.status(401).json({ 
     err: info 
     }); 
    } 
    req.logIn(user, function(err) { 
     if (err) { 
     return res.status(500).json({ 
      err: 'Login failed' 
     }); 
     } 
     var token = Verify.getToken(user); 
     res.status(200).json({ 
     status: 'Login successful', 
     success: true, 
     token: token 
     }); 
    }); 
    })(req,res,next); 
}); 

如果不使用ngrx store,我建议干脆用localStorage

设置:

localStorage.setItem('token', this.token); 

要获取:

localStorage.getItem('token'); 

删除:

localStorage.removeItem('token'); 

这应该让你开始:

login(something: string): Observable<boolean> { 
    return this.http 
     .post(this.authUrl, JSON.stringify({ }), { headers: this.headers }) 
     .map((response: Response) => { 
      let responseObject = response.json();   
      let token = responseObject.token;  
      localStorage.setItem('token', JSON.stringify({ token: this.token})); 
      return true; 
     }); 
    } 

如果您保存在localStorage的JSON对象就像在我的例子,你需要分析它:

JSON.parse(localStorage.getItem('token')); 
+0

嗨Frecia,这是非常有用的,但我不知道如何真正得到令牌进入我的角2的应用程序。 localhost:3000/users/auth/callback?= ....是一个带有json对象的白页面,其中包含从后端的passportjs返回的令牌和成功消息。如何将该json对象重定向到我的角度应用程序? – seanEd

+0

我需要一个回调或承诺或什么,因为他们必须通过Facebook登录,然后重定向。 – seanEd

+0

这样的事情:login(data).then((result){console.log(result)})应该保存用户数据 – FRECIA