簡體   English   中英

password.js沒有將用戶傳遞到會話

[英]passport.js not passing user to session

我正在嘗試使用passport.js,node和sequelize創建一個應用程序。 但是,護照未按預期返回會話中的用戶。

當我登錄req.session時,我得到了:

Session {
  cookie: 
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true,
     secure: true } }

當我登錄req.session.passport時,我不確定。

我怎樣才能解決這個問題?

這是我的server.js:

const express = require('express');
const load = require('express-load');
const passport = require('passport');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const session = require('express-session');

// var app = express();
var app = module.exports = express();

// read cookies (needed for auth)
app.use(cookieParser()); 

// get information from html forms
app.use(bodyParser()); 

//set session
app.set('trust proxy', 1) // trust first proxy
app.use(session({
  secret: 'asdasdsada',
  resave: false,
  saveUninitialized: true,
  cookie: { secure: true }
}))

// required for passport
app.use(passport.initialize());
app.use(passport.session({
    secret: 'adsdssa',
    name: 'sadasd',
    proxy: true,
    resave: true,
    saveUninitialized: true
}));

這是我的passport.js:

var LocalStrategy = require('passport-local').Strategy;
var SlackStrategy = require('passport-slack').Strategy;

var User  = require('../models/index').User;

var mysql = require('mysql');
var connection = mysql.createConnection({
  host     : process.env.MYSQL_HOST,
  user     : process.env.MYSQL_USER,
  password : process.env.MYSQL_PASSWORD,
  database : process.env.MYSQL_DB
});

module.exports = function(passport) {

    passport.serializeUser(function(user, done) {
        console.log('-----------serialize');
        done(null, user.id);
    });

    passport.deserializeUser(function(id, done) {
        console.log('----------deserialize');
        Model.User.findOne({
          where: {
            'id': id
          }
        }).then(function (user) {
          if (user == null) {
            done(new Error('Wrong user id.'));
          }

          done(null, user);
        })
    });

    passport.use('slack', new SlackStrategy({
        clientID: process.env.SLACK_ID,
        clientSecret: process.env.SLACK_SECRET,
        callbackURL: process.env.SLACK_REDIRECT,
        scope: "incoming-webhook users:read"
    },
        function(accessToken, refreshToken, profile, done) {

            var values = { 
                where: { slack_id: profile.id }, 
                defaults: {slack_id: profile.id, name: profile.displayName} 
            };

            User.findOrCreate(values)
            .spread(function(user, created) {
                return done(null,user);
            });

        }
    ));

這些是我正在使用的路線:

app.get('/auth/slack',
        passport.authorize('slack'));

app.get('/auth/slack/callback', 
        passport.authorize('slack', { failureRedirect: '/login' }),
        function(req, res) {
            //Successful authentication, redirect home.
            console.log(req.session);
            console.log(req.session.passport);
            res.redirect('/dashboard');
        }
    );

我有同樣的問題並解決了。

只需刪除

secure: true 

像這樣的會議

//set session
app.use(session({
  secret: 'asdasdsada',
  resave: false,
  saveUninitialized: true
}))

它應該可以工作。您還可以在此處查看簡單的本地護照示例https://github.com/passport/express-4.x-local-example

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM