【问题标题】:Express-Passport Local Authentication not working for safari browserExpress-Passport 本地身份验证不适用于 Safari 浏览器
【发布时间】:2018-01-09 16:47:36
【问题描述】:

请注意,我是 node js 的初学者,所以提前道歉。

        app.use(express.static(__dirname + uiDir));
        app.use(cookieParser('SecretKey')); 
        app.use(bodyParser.json());
        app.use(bodyParser.urlencoded({extended: true}));
        app.use(session({
           secret: 'SecretKey',
            resave: true,
            saveUninitialized: true,
            rolling:'true',
            cookie:{
                maxAge: 60*1000*30, 
                secure:true,
                httpOnly: true,
            }
        }));

        app.use(passport.initialize());
        app.use(passport.session()); 
        app.use(helmet({
            frameguard: {
                action: 'sameorigin'
            }
        }));
        app.use(flash()); 



       passport.serializeUser(function(user, done) {
            done(null, user.username);
       }); 

        passport.deserializeUser(function(user, done) {
            done(null, user);
        });     
       passport.use('local',new LocalStrategy(

                function(username, password, done) {

                var loginqry = {
                    jsonrpc: '2.0',
                                id: 12,
                        method: 'call',
                        params: [ 'toIntergrateLater', 'users', 
                                 'authenticate',

                                  {"username":username,
                                  "password":password
                                  } 

                        ]
                };

                BackendAuthservice.auth(loginqry,function(data){                

                   if(data.result.error=="Wrong password"){                                        
                     return done(null, false, { message: 'Incorrect username or password.' });
                    }
                    if(data.result.error=="User not found"){
                         return done(null, false, { message: 'User not found' });
                    }   

                    else{
                        data.result.status = true;
                        return done(null,data );
                    }
                });
      }));

此代码在 IE、Firefox、Chrome、Mac-google-chrome 上运行良好,但 当我访问 MAC Safari (req.user) 时未定义。请帮忙

来自 safari 的传入请求,我在 passport-js 的成功重定向上获得 req.user undefined

【问题讨论】:

  • 嗨 abhijeet,您找到解决方案了吗?我遇到了完全相同的问题。
  • 嗨@bprdev,浏览器正在向我的快速服务器发送一个包含当前时间的请求,但是我的服务器PC在恢复出厂设置时显示从当前日期过去15天的时间,并且快速会话超时时间为只有30分钟。由于哪个浏览器发送了带有过期 cookie 的响应,因此没有调用“Set-cookie”。将我的快速服务器系统与 NTP 同步解决了我的问题。

标签: javascript node.js safari passport.js express-session


【解决方案1】:

尝试在 done 回调中传递 user 而不是 user.username。 如果在序列化用户中传递了 user.username,则反序列化方法必须将用户名作为参数。

passport.serializeUser(function(user, done) {
        done(null, user);
   });

【讨论】:

    猜你喜欢
    • 2017-04-03
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多