Passportjs本地策略永远不会被调用

时间:2018-07-26 18:56:02

标签: node.js passport.js passport-local

我正在学习Passportjs,并且我的server.js中包含以下代码,我面临的问题是,以下代码中的passport.use('local',new LocalStrategy({})从未被调用,其余的都可以正常工作,除了localstrategy之外,挣扎了好几个小时!

我正在学习Passportjs,并且我的server.js中包含以下代码,我面临的问题是,以下代码中的passport.use('local',new LocalStrategy({})从未被调用,其余的都可以正常工作,除了localstrategy之外,挣扎了好几个小时!

const express=require("express");
const bodyParser=require('body-parser');
const ejs=require("ejs");
const cookieParser=require('cookie-parser');
const passport=require('passport');
const LocalStrategy=require('passport-local').Strategy;
const session=require("express-session");
const app=express();
app.set(express.static,'public');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cookieParser());
app.use(session({secret:'library'}));

app.use(passport.initialize());
app.use(passport.session());

app.post('/auth/signUp',(req,res,next)=>{
    console.log('body',req.body)
    passport.authenticate('local',(err,user,info)=>{
        console.log("whattt",user)
        req.login(user,(err)=>{
            res.redirect('/auth/profile');
        });
    })(req, res, next);
});

app.get('/auth/profile',(req,res)=>{

    res.json(req.user);
});


app.get("/",async (req,res)=>{

    res.render('index.ejs');
});

passport.serializeUser((user,done)=>{
    done(null,user.id);
});

passport.deserializeUser((id, done)=> {
    console.log("id",id);
    let data=[{id:1,name:"malouda"},{id:2,name:"Jason"}];
    let user = data.find((obj)=>{ return obj.id === id; });
    done(null,user);
});

passport.use('local',new LocalStrategy({
    usernameField: 'username',
    passwordField: 'password'
},(username,password,done)=>{
    user={id:1,name:"malouda"};
    console.log("LocalStrategy")
    done(null,user);
})); 
app.listen(3000,()=>{
    console.log("Listening on port 6000");
});

在我的index.js中,我具有以下格式

<form name="signUpForm" action="/auth/signUp" method="post" multipart='urlencoded'>
                <div class="form-group">
                    <label for="username">Username</label>
                    <input type="text" class="form-control" name="username" id="username" placeholder="Username">
                </div>
                <div class="form-group">
                    <label for="exampleInputPassword1">Password</label>
                    <input type="password" class="form-control" name="password " id="exampleInputPassword1" placeholder="Password">
                </div>
                <button type="submit" class="btn btn-primary">Submit</button>
            </form>

1 个答案:

答案 0 :(得分:0)

Passport LocalStrategy用于登录身份验证。

在注册时,您不需要护照。在注册中,您只需将用户存储在数据库中即可创建该用户。

您需要添加

Passport.authenticate(`local`, (err, user, info) => {}

在您的登录 API中以验证用户身份。

顾名思义, Passport.authenticate 对用户凭据进行身份验证。所以首先您需要创建用户。

Read more here.

希望我清除了您的想法。