2017-09-04 112 views
0

我正在用MEAN Stack构建一个Web应用程序。我试图实现的是,当用户登录他的用户信息时,我的REST API会被Angular获取。我设置了API路由http://localhost:3000/api/user/profile,它应该用包含用户对象的json响应。Angular 4&Passport API身份验证

router.get('/user/profile', function(req, res, next){ 
    //console.log(req); 
    if(req.user === undefined){ 
     res.json({ 
      success: false, 
      msg: 'Unautorized' 
     }); 
    } else { 
     res.json({ 
      success: true, 
      user: { 
       id: req.user.steam.id, 
       name: req.user.steam.name, 
       avatar: req.user.steam.avatar, 
       avatarmedium: req.user.steam.avatarmedium, 
       avatarfull: req.user.steam.avatarfull 
      } 
     }); 
    } 
}); 

当角用户登录启动一个GET请求:

ngOnInit() { 
    this.authService.getProfile().subscribe(profile => { 
     this.user = profile.user; 
     console.log(profile); 
    }, 
    err => { 
     console.log(err); 
     return false; 
    }); 

} 

getProfile():

getProfile(){ 
    return this.http.get('http://localhost:3000/api/user/profile') 
    .map(res => res.json()); 
} 

当我加载了我的网站,登录,转到配置文件页面返回的对象包含成功:false和消息'未经授权'而不是用户对象。这是为什么发生?

+0

您在this.http.get调用中没有发送任何参数。访问参数的方式也是错误的。请参阅此问题以获取发送参数和获取参数的正确格式。 https://stackoverflow.com/questions/17007997/how-to-access-the-get-parameters-after-in-express –

+0

我不认为你正确理解我的问题,对不起,如果我没有说得好。 get请求正在完全工作,我只是得到了req.user未定义即使我已登录的情况下的响应。当访问route/api/user/profile和req.user时,我console.logged req从角度进行调用时某个对象不存在。因此,不知何故,登录时Cookie不会被设置。 – DerJP

+0

通常,用户信息通过授权标头中的身份验证令牌传递到服务器。用户验证后,您应该从auth提供商处收回令牌。这个标记最有可能是一个jwt,如果你通过一个头传递回服务器,你可以解码jwt令牌并获取它的信息。如果您确实需要使用https://jwt.io/上的调试器来查看其中的所有信息。如果你在github中有这个,将会更容易排除故障:) – zmanc

回答

0

我完全重新设计了我的方法。我实现了json web令牌,它现在通过url参数向用户发送一个令牌(包含所有用户数据)。