javascript - Passportjs jwt,客户端响应未经过身份验证

标签 javascript node.js express jwt passport.js

尝试使用passport-JWT实现登录。注册和登录都工作正常, token 在登录时生成并发送到客户端,客户端存储并返回它。

登录身份验证请求到达应用程序后没有任何反应..帮助? :)

智威汤逊战略

var JwtStrategy = require('passport-jwt').Strategy,
    ExtractJwt = require('passport-jwt').ExtractJwt;
    var opts = {}
    opts.jwtFromRequest = ExtractJwt.fromAuthHeader();
    opts.secretOrKey = 'secret';
    opts.issuer = "http://localhost:3000";
    opts.audience = "http://localhost:3000";

    passport.use('jwt', new JwtStrategy(opts, function(jwt_payload, done) { 
        console.log(1)
        return User
            .findOne({where : {username : jwt_payload.email } })
            .then(function (user) {
                if(user === null){
                    return TempUser
                            .findOne({where : {username : jwt_payload.email } })
                            .then(function(user){
                                return user === null ? 
                                    done(null, false, 'login error, please try again') :
                                    done(null, false, 'email verification needed');
                            });
                } else {
                    if (bcrypt.compareSync(password, user.dataValues.password)){        
                            done(null, user); 
                    } else {
                        done(null, false, 'login error, please try again');
                    }

            }
        });
    }));

路线

router.get('/login/check', function(req, res, next) {
        passport.authenticate('jwt', function(err, user, info) {
            console.log(err)
            res.json({'success' : true});
        })
    })

客户端返回req.query

GET /login/check?%22eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJzaGFpLmthcGx1bkBnbWFpbC5jb20iLCJwYXN
zd29yZCI6IiQyYSQxMCQ0YXpvSlVLMkltUkl3YWo0Uzlqd1RPVXh0RWIwYWphNW92UjRvUnV1QUFRdnJ5Z3g5cWttNiIsImNyZWF0ZWRBdCI6IjIwMTYtMDg
tMDdUMTM6MjI6NDYuMzUyWiIsInVwZGF0ZWRBdCI6IjIwMTYtMDgtMDdUMTM6MjI6NTkuOTExWiIsImlhdCI6MTQ3MDY1NzY0MCwiZXhwIjoxNDcwNzU3NjQ
wfQ.hyHDcmzJne-d6roRXBgC9aQDeZzQPgpkWWOZicQNc8c%22 - - ms - -

最佳答案

您告诉 Passport-JWT 在授权 header 中查找 JWT,但您似乎正在尝试将 JWT 作为查询字符串传递。

尝试发送 header : 身份验证:“JWT”+ token

我实际上为此前端和后端编写了一个教程,您可能会发现它很有帮助。

http://blog.slatepeak.com/refactoring-a-basic-authenticated-api-with-node-express-and-mongo/

http://blog.slatepeak.com/build-a-react-redux-app-with-json-web-token-jwt-authentication/

关于javascript - Passportjs jwt,客户端响应未经过身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38828870/

相关文章:

javascript - 我可以将来自 Google API 的 XML 存储在 Javascript 中作为字符串吗?

javascript - 更改元素的可见性时不会调用事件

javascript - 使用不同文件中的 Angular Directive(指令)访问 js 文件中定义的变量

node.js - 如何将字符串作为 gzip Nodejs 上传到 s3

sql-server - 使用 Windows 身份验证登录本地 SQL Server 实例

javascript - axios post params没有被发送

node.js - 如何在 expressjs 中重载 app.listen 的功能

javascript - 检查网络并处理空错误对象

javascript - Cors 似乎在我的 Node 服务器上默认启用。我错过了什么吗?

node.js - Node - Passport Auth - Authed Post Route 在表单提交时挂起