[英]How to login user with passport.js
I've been trying to setup passport with my express application.我一直在尝试使用我的快速申请设置护照。 However when trying to use passport.authenticate, I recieve a 401 unauththorized on postman.
但是,当尝试使用 passport.authenticate 时,我在 postman 上收到未经授权的 401。 I alsoing tried it on the browser, but I'm getting a similar error.
我也在浏览器上尝试过,但我遇到了类似的错误。
Heres my setup这是我的设置
userModel.js用户模型.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userModel = new Schema({
username:{type:String,required:true,unique:true},
password:{type:String,required:true},
bio:{type:String},
jobs:[{type:Schema.Types.ObjectId,ref:'Job'}]
})
userModel.plugin(require('passport-local-mongoose'));
module.exports = mongoose.model('User',userModel);
passport.config.js护照.config.js
const mongoose = require('mongoose');
const express = require('express');
const app = express();
const passport = require('passport');
const localStrategy = require('passport-local').Strategy;
const User = require('./Models/userModel.js');
passport.use(new localStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
index.js index.js
const userModel = require('./Models/userModel');
const jobModel = require('./Models/jobModel');
const LocalStrategy = require('passport-local').Strategy
passport.use(new LocalStrategy(userModel.authenticate()));
app.use(express.json());
app.use(require('express-session')({ secret: "secretkey", resave: true, saveUninitialized: true }));
require("./passport.config");
app.use(passport.initialize());
app.use(passport.session());
mongoose.connect(process.env.MONGO_URI,{useNewUrlParser:true},() => {
console.log('mongodb connected')
})
app.post('/login',
passport.authenticate('local'),
function(req, res) {
// If this function gets called, authentication was successful.
// `req.user` contains the authenticated user.
res.send(req.user);
});
You have set the passport.use 2 times with different mongoose schema.您已经使用不同的 mongoose 架构设置了 passport.use 2 次。 passport.config have this line:
passport.config 有这一行:
passport.use(new localStrategy(User.authenticate()));
index.js have this: index.js 有这个:
passport.use(new LocalStrategy(userModel.authenticate()));
decide which one you want to use.决定你要使用哪一个。
Also you did not set the passport-local strategy right.此外,您没有正确设置护照本地策略。 The strategy requires a verify callback, which accepts credentials(username and password) and calls done on finish providing user.
该策略需要一个验证回调,它接受凭据(用户名和密码)并在完成提供用户时完成调用。
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));
you can also try to change this:你也可以尝试改变这个:
passport.use(new LocalStrategy(userModel.authenticate()));
to至
passport.use(userModel.authenticate());
source: passport docs来源:护照文件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.