passport.js 是不是支持 ajax?
Posted
技术标签:
【中文标题】passport.js 是不是支持 ajax?【英文标题】:Does the passport.js support ajax?passport.js 是否支持 ajax? 【发布时间】:2015-06-18 21:24:03 【问题描述】:我想用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>
);
//...
)
但是,它不起作用,因为重定向(successRedirect
和 failureRedirect
)会起作用。如果我删除 failureRedirect
我会得到 401
状态。我了解我的 passport
代码用于服务器端渲染和页面刷新,但我找不到任何有关 ajax 登录的文档。
【问题讨论】:
【参考方案1】:您可以使用自定义回调返回 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);
);
【讨论】:
以上是关于passport.js 是不是支持 ajax?的主要内容,如果未能解决你的问题,请参考以下文章
phonegap ajax 用户身份验证与 nodejs-express-mongodb-passport js
Passport-local mongoose node.js 支持多种用户类型