代码之家  ›  专栏  ›  技术社区  ›  Gene Lim

Passport本地返回错误400 Angular错误请求

  •  25
  • Gene Lim  · 技术社区  · 9 年前

    我正在尝试将passport集成到我的代码的登录表单中。客户端调用服务器端正常工作,直到我调用passport。在请求中进行身份验证,返回400个错误请求。我在这里错过了什么。

    HTML语言

            <div>
                <div class="row">
                    <div class="input-field col s12">
                        <input id="user-email" type="text" ng-model="user.email">
                        <label for="user-email">Your email address</label>
                    </div>
                </div>
                <div class="row">
                    <div class="input-field col s12">
                        <input id="user-password" type="password" ng-model="user.password">
                        <label for="user-password">Your password</label>
                    </div>
                </div>
                <div id="login-button-panel" class="center-align">
                    <button class="btn" id="login-btn" ng-click="vm.login(user);">Login</button> 
                </div>
                <div class="section center">
                    <a class="modal-trigger">Forgot password?</a>
                </div>
            </div>
    

    JS语言

    $http.post('/api/login',user).success(function(result){
        console.log(result)
    })
    

    服务器.js

    passport.use(new LocalStrategy(
        function(username, password, done) {
            return done(null, false, {message:'Unable to login'})
        }
    ));
    passport.serializeUser(function(user,done){
        done(null,user);
    });
    
    passport.deserializeUser(function(user,done){
        done(null,user);
    });
    app.post('/api/login', passport.authenticate('local'), function(req,res){
        res.json(req.user)
    });
    
    5 回复  |  直到 9 年前
        1
  •  56
  •   Thomas Urban    8 年前

    错误的请求 由于缺少用户名和密码的访问权限,被passport抛出。

    它正在检查字段的正文和URL查询 username password 。如果是 虚伪的 该请求被拒绝,状态为400。

    在创建LocalStrategy时,可以将附加参数中的一组选项传递给构造函数,使用选项选择不同名称的字段 usernameField 和/或 passwordField 。在您的特定情况下,这看起来像这样:

    passport.use(new LocalStrategy(
        {usernameField:"user-email", passwordField:"user-password"},
        function(username, password, done) {
            return done(null, false, {message:'Unable to login'})
        }
    ));
    
        2
  •  14
  •   Jeff Hoye    8 年前

    在我的情况下(Express 4.0),我没有使用 body-parser

        3
  •  7
  •   Dan O    4 年前

    此错误还来自于尝试访问请求有效负载而不使用 正文分析器

    使用-

    var parser = require('body-parser');
    var urlencodedParser = parser.urlencoded({extended : false});
    
    
        app.post("/authenticate", urlencodedParser, passport.authenticate('local'), function (request, response)
        {           
            response.redirect('/');                      
        });
    
        4
  •  2
  •   LekhRazz Rokaya    6 年前
    passport.use(new LocalStrategy(
        {
            usernameField: 'email',
            passwordField: 'password'
        },
        function (email, password, done) {
            db.collection('User').findOne({ email: email }, async function (err, user) {
                console.log('user requested password caught in passport', password);
                if (err) { return done(err); }
                if (!user) { return done(null, false); }
                const matchPassword = await comparePassword(password, user.password);
                if (!matchPassword) { return done(null, false); }
                return done(null, user);
            });
        }
    ));
    
        5
  •  0
  •   aymen louleb    2 年前
    app.post("/register",function(req,res){
      Client.register({username:req.body.email},req.body.password,function(err,client){
        if(err){
          console.log(err);
          res.redirect("/register")
        }
        else{
          passport.authenticate("local")(req,res,function(){
            console.log("success");
            res.redirect("/secrets")
          })
        }
      })
    })