有没有什么方法可以让用户使用自己的密码、邮箱和姓名在本地策略上注册?
我可以在网上找到的每个示例都只使用名称/密码或电子邮件/密码。
我还搜索了整个 Passport 文件,但这些文件根本没有帮助。这只是一个充满示例的臃肿网站。
我只需要一张 Passport 使用的函数、类和变量的列表,并解释它们和它们的每个参数的作用。每个好的图书馆都有这样的东西,为什么我找不到 Passport ?
以下是我的代码的关键部分:
passport.use('local-signup', new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
//are there other options?
//emailField did not seem to do anything
passReqToCallback: true // allows us to pass in the req from our route (lets us check if a user is logged in or not)
},
function(req, email, password, done) {
//check if email not already in database
//create new user using "email" and "password"
//I want an additional parameter here "name"
}));
所以 Passport 真的有那么有限吗?必须有办法做到这一点,对吧?
最佳答案
您可能会有些困惑,但 Passport 没有实现注册方法。它只是授权库。因此,您必须自己处理该用例。
首先,创建负责注册和检查的路由:
signup: function (req, res) {
User
.findOne({
or: [{username: req.param('username')}, {email: req.param('email')}]
})
.then(function(user) {
if (user) return {message: 'User already exists'};
return User.create(req.allParams());
})
.then(res.ok)
.catch(res.negotiate);
}
上面的例子是基于 Sails 框架的,但是你可以毫无问题地适应你自己的情况。
下一步是包括 Passport 本地策略。
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var LOCAL_STRATEGY_CONFIG = {
usernameField: 'email',
passwordField: 'password',
session: false,
passReqToCallback: true
};
function _onLocalStrategyAuth(req, email, password, next) {
User
.findOne(or: [{email: email}, {username: email}])
.then(function (user) {
if (!user) return next(null, null, {
code: 'E_USER_NOT_FOUND',
message: email + ' is not found',
status: 401
});
if (!HashService.bcrypt.compareSync(password, user.password)) return next(null, null, {
code: 'E_WRONG_PASSWORD',
message: 'Password is wrong',
status: 401
});
return next(null, user, {});
})
.catch(next);
}
passport.use(new LocalStrategy(LOCAL_STRATEGY_CONFIG), _onLocalStrategyAuth));
我们现在只有登录任务。很简单。
signin: function(req, res) {
passport.authenticate('local', function(error, user, info) {
if (error || !user) return res.negotiate(Object.assign(error, info));
return res.ok(user);
})(req, res);
}
这种方式更适合 Passport ,对我来说效果很好。
关于javascript - Passport : Allow sign up with name and email address?(本地策略),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32398120/