简体   繁体   English

如何使用passport.js登录用户

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM