【问题标题】:Angular 4 & Passport API authenticationAngular 4 和 Passport API 身份验证
【发布时间】:2018-02-12 21:25:39
【问题描述】:

我正在使用 MEAN Stack 构建一个 Web 应用程序。我想要实现的是,当用户登录时,Angular 会从我的 REST API 中获取他的用户信息。我设置了 API 路由 http://localhost:3000/api/user/profile,它应该响应包含用户对象的 json。

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
            }
        });
    }
});

当用户登录 Angular 时,启动一个 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());
}

当我加载我的站点、登录并转到个人资料页面时,返回的对象包含 success: false 和消息“未经授权”而不是用户对象。为什么会这样?

【问题讨论】:

  • 您没有在 this.http.get 调用中发送任何参数。而且访问参数的方式也是错误的。有关发送参数和访问获取参数的正确格式,请参阅此问题。 stackoverflow.com/questions/17007997/…
  • 我认为您没有正确理解我的问题,如果我说得不好,请见谅。获取请求完全正常,即使我已登录,我也只是得到了 req.user 未定义的情况的响应。我在访问路由 /api/user/profile 和 req.user 时控制台记录了 req从角度进行调用时,对象不知何故不存在。所以登录时cookie没有被设置
  • 通常用户信息通过授权标头中的身份验证令牌传递给服务器。用户进行身份验证后,您应该会收到来自身份验证提供者的令牌。该令牌很可能是一个 jwt,如果您通过标头将其传递回服务器,则您可以解码 jwt 令牌并获取有关它的信息。如果您确实有 toek,请使用jwt.io 上的调试器查看其中的所有信息。如果您在 github 中有此内容,则故障排除会更容易:)

标签: javascript node.js angular express passport.js


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-09-28
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 2020-06-02
    • 2021-06-01
    • 2013-08-02
    • 1970-01-01
    • 2019-03-28
    相关资源
    最近更新 更多