2017-10-19 3 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('/'); 
}); 

しかし、私は発生しない認証ファイルのルートに、サーバーファイルからパスポートを公開しようとします。ここではほとんどの質問を検索して文書に戻ってきましたが、すべてのチュートリアルではすべてのルートを含む1つのサーバーファイルしか表示されません。

Serverファイル:

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

あなたは@douxseyに何を求めているのかはっきりしていませんか?ルートファイルが表示されます。なぜなら、私の記事で説明したように、この作業を行う2つの試みがあるからです。また、投稿はログに関するものではなく、私の質問にどのように影響するのか分かりません。 – SMT

答えて

0

必要な場合がありますパスポート通常、パスポートを取得する必要はありませんlet passport = req.passport。ここではパスポート Routes.jsによってグーグルのOauthのた​​めの私の小さなデモが

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

関連する問題