通过护照认证传递变量

问题描述 投票:0回答:0

我正在使用 Netlify 上运行的 PassportJS 通过 OAuth 对外部网站进行用户身份验证。我已经成功地进行了身份验证,但我完全困惑于需要传递一个指示请求的最终处理的变量(returnToUrl)。我的阅读表明我应该在会话中设置它,并且我正在这样做,但是该值不可用于回调。

这是我目前所拥有的:

const passport = require("passport");
const serverless = require('serverless-http');

const AmazonStrategy = require("passport-amazon").Strategy;

const express = require("express");
const session = require('express-session')
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: false }));

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

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

app.use(session({ 
  secret: "xxxxxxxx" ,
  resave: true,
  saveUninitialized: true
}));

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

passport.use(new AmazonStrategy({
  clientID: process.env['AMAZON_CLIENT_ID'],
  clientSecret: process.env['AMAZON_CLIENT_SECRET'],
  callbackURL: AUTH_BASE + "/amazon/callback",
  scope: ['profile']
},
function(accessToken, refreshToken, profile, done) {
    let user = profile
    return done(null, user);
  
}
)
);
app.get('/auth/amazon',
   (req,res,next)  => {
     req.session.returnToUrl = req.originalUrl;
     console.log('try amazon auth, req.session is', req.session); // session includes the returnToUrl value
     passport.authenticate('amazon')(req,res,next)
  }
    );

app.get('/auth/amazon/callback', 
    passport.authenticate('amazon', { scope: ['profile', 'postal_code'], failureRedirect: '/login', failureMessage: true}),
    (req, res, next) =>  {
      console.log('req.session is is', req.session); // session is present, minus returnToUrl
        console.log('data received',req.session.returnToUrl); // This returns UNDEFINED
        res.redirect('/auth');
    }
  );

app.get('/auth', async (req, res) => {
    // some stuff removed
    console.log('data received at /auth',req.session.returnToUrl) ; UNDEFINED
}    

如有任何帮助,我们将不胜感激!

node.js express passport.js
© www.soinside.com 2019 - 2024. All rights reserved.