使用Passport授权时设置邮递员进行API测试

时间:2016-08-05 02:01:17

标签: node.js rest passport.js restful-authentication postman

在测试我的应用程序的API时,我试图让Postman工作时有点困惑。即,我正在使用Passport身份验证;但是,我不知道它在我的代码中默认使用哪种类型。我怎么能弄清楚这一点以及我应该在Postman中选择哪种类型?

以下是相关的Passport代码:

var login = require('./login');
var signup = require('./signup');
var User = require('../models/user');

module.exports = function(passport, path, nodemailer, sesTransport, EmailTemplate, templateDir, template){

    // Passport needs to be able to serialize and deserialize users to support persistent login sessions
    passport.serializeUser(function(user, done) {
        //console.log('serializing user: ');console.log(user);
        done(null, user._id);
    });

    passport.deserializeUser(function(id, done) {
        User.findById(id, function(err, user) {
            //console.log('deserializing user:',user);
            done(err, user);
        });
    });

    // Setting up Passport Strategies for Login and SignUp/Registration
    login(passport);
    signup(passport, path, nodemailer, sesTransport, EmailTemplate, templateDir, template);

}

最后,几乎所有的API点都只在用户登录时才有效。如何通过保存授权凭证来模拟Postman中的相同行为?

修改:

Perhaps this code is relevant as well:


module.exports = function(passport){

    passport.use('login', new LocalStrategy({
            passReqToCallback : true,
            usernameField: 'email',
            passwordField: 'password'
        },
        function(req, username, password, done) { 
            // check in mongo if a user with username exists or not
            User.findOne({ 'email' :  username }, 
                function(err, user) {
                    // In case of any error, return using the done method
                    if (err)
                        return done(err);
                    // Username does not exist, log the error and redirect back
                    if (!user){
                        console.log('User Not Found with username '+username);
                        return done(null, false, req.flash('message', 'User Not found.'));                 
                    }
                    // User exists but wrong password, log the error 
                    if (!isValidPassword(user, password)){
                        console.log('Invalid Password');
                        return done(null, false, req.flash('message', 'Invalid Password')); // redirect back to login page
                    }
                    // User and password both match, return user from done method
                    // which will be treated like success
                    return done(null, user);
                }
            );

        })
    );


    var isValidPassword = function(user, password){
        return bCrypt.compareSync(password, user.password);
    }  
}

3 个答案:

答案 0 :(得分:6)

我没有运行本地身份验证策略的代码,但我认为以下邮递员设置应该适合您。

请求访问令牌;假设您的端点是auth / local。

  1. 打开邮递员
  2. 创建POST请求
  3. 在授权标签下设置“No Auth”
  4. 在正文标签下 - >点击x-www-form-urlencoded
  5. 添加名为email的密钥并输入用户电子邮件
  6. 添加名为密码的密钥并输入电子邮件的相关密钥
  7. 请参阅下面的令牌请求屏幕截图:

    localAuthentication

    响应将以access_token返回。

    要使用access_token,只需创建一个HTTP请求,然后在HEADER选项卡中添加密钥Authorization,后跟值“Bearer”

    请参阅使用令牌请求屏幕截图: enter image description here

答案 1 :(得分:1)

我使用它,在邮递员中工作正常。 获得访问令牌的响应后 在“授权”标签下。从“类型”下拉列表中选择“承载者令牌”。令牌与字段将显示在右侧。输入访问令牌。

这可以与Laravel REST API配合使用。

检查屏幕截图 Postman Auth Token passing

答案 2 :(得分:0)

我所做的是。首先通过邮递员发送登录请求。如果您查看回复,您应该会看到一个 cookie 选项卡。复制cookie的值

Postman Picture

当您想检查标题中的“受保护”路由时,您需要选择 cookie 并在值中粘贴您之前复制的值。

Cookie Header