【问题标题】:Setting Up Postman for API Testing When Using Passport Authorization使用 Passport 授权时为 API 测试设置 Postman
【发布时间】:2016-12-11 07:46:07
【问题描述】:

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

这是相关的护照代码:

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

【问题讨论】:

  • 您使用的是哪种护照认证策略?大多数人使用passport-http-bearer。
  • 如何确定?我查看了代码,似乎没有任何参数。
  • 可以是本地护照吗?

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


【解决方案1】:

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

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

  1. 打开邮递员
  2. 创建一个 POST 请求
  3. 在授权选项卡下设置“无身份验证”
  4. 在正文选项卡下 -> 点击 x-www-form-urlencoded
  5. 添加一个名为email的键并输入用户email
  6. 添加一个名为 password 的密钥并输入电子邮件的相关密码

请参阅下面的令牌请求屏幕截图:

响应将返回一个 access_token。

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

查看使用令牌请求截图:

【讨论】:

  • @MadPhysicist 让我知道这是否适合您。
  • 您所指的“关联电子邮件密码”是什么?
  • 我已经尝试了您建议的第一部分。在登录页面上,我有两个文本字段:电子邮件和密码。这些是我在执行 POST 请求时预先填写的键和值。但是,它返回(代码 200)并且似乎将整个登录页面(HTML 表单)返回给我。
  • @MadPhysicist 从您的登录端点返回的内容由您自己的代码确定。 Passport 仅执行身份验证并告诉您的应用程序执行身份验证的用户是否有效。通常,您的代码会继续生成唯一的访问令牌并将其作为响应传回给用户。然后,用户将使用此令牌在后续请求中代表他。检查端点中的代码。我怀疑你会有类似res.redirect('login-page-url')
  • “关联电子邮件机密” - 我的意思是用户的护照。
【解决方案2】:

我使用它,它在邮递员中运行良好。 获得访问令牌的响应后 在授权选项卡下。从“类型”下拉列表中选择“不记名令牌”。并且带有字段的令牌将出现在右侧。输入访问令牌。

这适用于 Laravel REST API。

查看屏幕截图 Postman Auth Token passing

【讨论】:

    【解决方案3】:

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

    Postman Picture

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

    Cookie Header

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-05
      • 2017-11-13
      • 2018-06-19
      • 2020-11-12
      • 2016-12-29
      • 2020-12-31
      • 2021-03-03
      • 2017-06-03
      相关资源
      最近更新 更多