微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

node.js – passport.js是否支持ajax?

我想用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);
        });
};

这是我的反应组件:

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

但是,它不起作用,因为重定向(successRedirect和failureRedirect)可以完成它们的工作.如果我删除failureRedirect,我将获得401状态.我理解我的服务器端渲染和页面刷新的护照代码,但我找不到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,next);
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐