Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js passport.js支持ajax吗?_Node.js_Reactjs_Passport.js_Passport Local - Fatal编程技术网

Node.js passport.js支持ajax吗?

Node.js passport.js支持ajax吗?,node.js,reactjs,passport.js,passport-local,Node.js,Reactjs,Passport.js,Passport Local,我想使用passport.js进行ajax登录。我有设置passport.js的常用代码: //route app.post('/api/auth/login', passport.authenticate('local-login', { successRedirect: '/', failureRedirect: '/login' })); //config strategy passport.use('local-login', new LocalStrategy({

我想使用passport.js进行ajax登录。我有设置passport.js的常用代码:

//route
app.post('/api/auth/login', passport.authenticate('local-login', {
    successRedirect: '/',
    failureRedirect: '/login'
}));

//config strategy
passport.use('local-login', new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password',
    passReqToCallback: true
}, loginUser));

var loginUser = function(req, email, password, done) {

    UserRepo.getOne({
        'local.email': email
    }).done(function(user) {

            if (!user || !user.validPassword(password)) {
                return done(null, false, {
                    message: 'user or password is incorrect'
                });
            }

            return done(null, user);

        },
        function(err) {
            return done(err);
        });
};
这是我的
react
组件:

var Login = React.createClass({
  //...
  handleSubmit: function (e) {
        e.preventDefault();

        var email = this.state.email.trim();
        var password = this.state.password.trim();
        var data = {
            email: email,
            password: password
        };

        api.auth.login(data, function (result) {
            console.log(result);            
        });    
    },

    render: function () {
        return (
            <form className="login-form" onSubmit={this.handleSubmit}>
                <section>
                    <label>email</label>
                    <input name="email" type="text" />

                    <label>password</label>
                    <input name="password" type="password"  />
                </section>
                <section>
                    <input type="submit" value="send"/>
                </section>
            </form>
        );
    }
  //...
})
var Login=React.createClass({
//...
handleSubmit:函数(e){
e、 预防默认值();
var email=this.state.email.trim();
var password=this.state.password.trim();
风险值数据={
电邮:电邮,,
密码:密码
};
api.auth.login(数据、函数(结果){
控制台日志(结果);
});    
},
渲染:函数(){
返回(
电子邮件
密码
);
}
//...
})

但是,它不起作用,因为重定向(
successRedirect
failureRedirect
)起作用。如果我删除
failureRedirect
我将获得
401
状态。我知道我的
passport
代码用于服务器端呈现和页面刷新,但我找不到任何ajax登录文档

您可以使用自定义回调返回JSON数据

app.post('/api/auth/login', function(req, res, next) {
    passport.authenticate('local-login', function(error, user, info) {
        if(error) {
            return res.status(500).json(error);
        }
        if(!user) {
            return res.status(401).json(info.message);
        }
        res.json(user);
    })(req, res, next);
});