2017-01-15 52 views
0

我有一個明確的服務器的路由上passport-amazon策略(我已經剝離出來,從回調爲簡潔的用戶處理代碼):回調不被要求護照亞馬遜

護照在服務器正是如此初始化。 JS:

//configure passport 
app.use(passport.initialize()); 
app.use(passport.session()); 
require('./config/passport')(passport); 

護照策略被添加在require('./config/passport')(passport)

passport.use(
    new AmazonStrategy({ 
    clientID: process.env.AMAZON_CLIENT_ID, 
       clientSecret: process.env.AMAZON_CLIENT_SECRET, 
       callbackURL: process.env.AMAZON_CALLBACK_URL 
      }, 
    (accessToken, refreshToken, profile, done) => { 
     console.log('in the callback for amazon auth'); 
     //user handling code here 
     return done(null, user); 

);

路線:

routes.get(
     '/login', 
     passport.authenticate(
      'amazon', 
      { 
       scope: ['profile'] 
      } 
     ), 
     (req, res) => { 
      console.log('something happens here'); 
     } 
    ) 

認證使得亞馬遜和使用回調URL。我有回調URL路徑上的中間件:

function isLoggedIn(req, res, next) { 
     if (req.isAuthenticated()) 
      return next(); 

     res.redirect('/'); 
} 

被調用和req.isAuthenticated()false。護照回叫功能從不記錄到控制檯。

+0

您在亞馬遜護照中間件中使用'done'還沒有返回用戶 –

+0

我在示例中刪除了該部分代碼的整潔。問題在於函數從來沒有被調用過。該日誌語句從未執行。 – Lunchbox

+0

我唯一想到的是,你沒有初始化護照 –

回答

0

我使用example code發現了問題。我所需要的中間回調航線的另一身份驗證呼叫:

routes.get(
     '/amazon/auth/callback', 
     passport.authenticate('amazon', {failureRedirect: '/'}),  
     (req, res) => { 
     console.log("at /amazon/auth/callback"); 
     res.redirect('/highlights'); 
    }); 

此執行護照回調和isLoggedIn方法傳遞。

感謝Ebrahim Pasbani的幫助和堅持在我身邊。

1

你的isLoggedIn中間件是bug。你不應該在回調url中檢查auth,因爲那時還沒有user

您可以將用戶重定向到回調路由中的安全路由,並在該路由上使用isLoggedIn中間件。

+0

我添加了一個沒有中間件檢查並重定向到中間件受保護路由的中間路由。同樣的問題,護照策略回調從不記錄到控制檯。 – Lunchbox

+0

@Lunchbox你的亞馬遜回調是否有'isLoggedIn'中間件呢? –

+1

@Lunchbox哦,我看到你現在解決了你的問題。涼 –