2017-10-19 163 views
0

我目前正試圖在我的節點服務器上使用護照來進行項目上的Twitter身份驗證。當我有一個服務器文件中的所有代碼護照功能如預期。下面是從服務器上文件的摘錄,在它所有的航線有:將passport.js從節點服務器文件集成到路由文件

passport.use(new TwitterStrategy({ 
    consumerKey: config.twitter.consumer_key, 
    consumerSecret: config.twitter.consumer_secret, 
    callbackURL: config.twitter.callback_url.dev 
}, (token, tokenSecret, profile, done) => { 
    console.log(token, tokenSecret, profile, done); 
    process.nextTick(() => { 
    return done(null, profile); 
    }); 
})); 

app.use(session({ secret: 'SOMESECRET' })); 
app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(express.static(path.join(__dirname, '../public'))); 
app.set('view engine', 'ejs'); 

// expose to routes 
app.all('*', (request, response, next) => { 
    request.log = log; 
    next(); 
}); 

app.get('/', (req, res) => { 
    res.render('pages/index.ejs'); 
}); 

// twitter auth endpoint 
app.get('/auth/twitter', passport.authenticate('twitter')); 

// twitter auth callback endpoint 
app.get('/auth/twitter/callback', passport.authenticate('twitter', { failureRedirect: '/' }), (req, res) => { 
    res.redirect('/'); 
}); 

然而,當我嘗試從服務器文件揭露護照路由文件的驗證永遠不會發生。我在這裏搜索了大部分問題,並返回到文檔,但所有教程都顯示了一個包含所有路由的服務器文件。

服務器文件:

passport.use(new TwitterStrategy({ 
    consumerKey: config.twitter.consumer_key, 
    consumerSecret: config.twitter.consumer_secret, 
    callbackURL: config.twitter.callback_url.dev 
}, (token, tokenSecret, profile, done) => { 
    console.log(token, tokenSecret, profile, done); 
    process.nextTick(() => { 
    return done(null, profile); 
    }); 
})); 

app.use(session({ secret: 'SECRET' })); // session secret 
app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(express.static(path.join(__dirname, '../public'))); 
app.set('view engine', 'ejs'); 

// expose to routes 
app.all('*', (request, response, next) => { 
    request.log = log; 
    request.passport = passport; 
    next(); 
}); 

// routes 
app.use('/', routes); 

路線文件:

import express from 'express'; 
const routes = express.Router(); 
import config from '../config.js'; 

// main 
routes.get('/', (req, res) => { 
    res.render('pages/index.ejs'); 
}); 

// twitter auth endpoint 
routes.get('/auth/twitter', (req, res) => { 
    const passport = req.passport; 
    passport.authenticate('twitter'); 
}); 

// twitter auth callback endpoint 
routes.get('/auth/twitter/callback', (req, res) => { 
    const passport = req.passport; 
    passport.authenticate('twitter', { 
    failureRedirect: '/' 
    }); 
    res.redirect('/'); 
}); 


module.exports = routes; 

缺少什麼我在這裏?我猜我不能在路線的功能裏面使用passport.authenticate。我仍然試圖弄清楚如何使用路由文件工作來獲取版本。任何幫助表示讚賞!

+0

爲什麼你再次redifine在路由文件的路徑和你的日誌什麼 – douxsey

+0

uhm im不清楚你在問什麼@douxsey?顯示路線文件是因爲有兩次嘗試使這項工作如我在文章中所述。此外,這篇文章不是關於日誌,我沒有看到如何在我的問題的因素。 – SMT

回答

0

你可以要求護照通常不需要通過let passport = req.passport獲得護照。這是我對谷歌的Oauth小的演示用的護照 Routes.js

const router = require('express').Router(); 
const passport = require('passport'); 

router.get(
    '/google', 
    passport.authenticate('google', { 
     scope: ['profile', 'email'], 
     session: false 
    }) 
); 
router.get(
    '/google/callback', 
    passport.authenticate('google', { 
     session: false 
    }) 
); 

Server.js

// passort config 
app.use(passport.initialize()); 
require('./services/passport'); // contains the passport google strategy 
// routes 
require('./routes')(app); 
+0

因此,server.js文件'app.use(passport.initialize());'中的第一行表示您已經在server.js文件中運行了'const passport = require('passport');'以及? – SMT

+0

沒關係我的上述評論 - 我看到你在做什麼,只是過度這一點。將接受這個解決方案,我的錯誤是小而愚蠢的:) – SMT

相關問題