gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 22:59:23 26 4
gpt4 key购买 nike

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

但是,它不起作用,因为重定向(successRedirectfailureRedirect)会发挥作用。如果我删除 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);
});

关于node.js - passport.js 是否支持 ajax?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29607497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com