2016-10-23 2 views
0

私はこの問題で同様の記事を見ましたが、それらの回答のどれも私の問題を解決してくれなかったようです。カップルの答えに不足しているハイフンを含める。パスポートを使うときは、私はcallbackURLでConnot GET/auth/twitter/callbackを取得し続けます。私は間違って何をしていますか?

ユーザーをTwitterに送信してPassportを使用して認証すると、callbackURLのGETハンドラがありません。私はそれが処理されていると信じているので、私はスーパー混乱していますが、それは動作していません。

var express = require('express'); 
var passport = require('passport'); 
var TwitterStrategy = require('passport-twitter').Strategy; 
var router = express.Router(); 
module.exports = router; 

router.get('/auth/twitter', 
    passport.authenticate('twitter'), 
    function (req, res) { 
     res.render('login') 
    }); 


router.get('/auth/twitter/callback', 
    passport.authenticate('twitter', { 
     successRedirect: '/', 
     failureRedirect: '/login' 
    })); 

router.route('/') 
    .get(function (req, res) { 
     res.render("login"); 
    }) 
    .post(passport.authenticate('twitter', { 
     successRedirect: '/', 
     failureRedirect: '/admin/login' 
     }) 

); 

passport.use(new TwitterStrategy({ 
    consumerKey: 'Consumer key here', 
    consumerSecret: 'Consumer secret here', 
    callbackURL: 'http://localhost:9000/auth/twitter/callback' 


    }, 
    function(token, tokenSecret, profile, cb) { 
     User.findOrCreate({ twitterId: profile.displayName }, function (err, user) { 
      if (err) { return cb(null, profile); } 

      if (!user){ 
       user = new User ({ 
        name: profile.displayName, 
        email: profile.emails[0].value, 
        username: profile.username, 
        provider: 'twitter' 
       }); 
       user.save(function (err) { 
        if (err) console.log(err); 
        console.log("successful user entry!"); 

        return done(err, user); 

       }); 
      } else { 
       return done(err, user); 
      } 

     }); 
    } 
)); 

そして、私のuserModel.js

:私は私のAuth.jsファイルで

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var passport = require('passport'); 
var session = require('express-session'); 

app.set('views', './views'); 
app.set('view engine', 'jade'); 
app.use(express.static('public')); 
app.use(express.static("node_modules/bootstrap/dist")); 
app.use(express.static("node_modules/jquery/dist")); 
app.use(express.static('img')); 

app.use(require('express-session')({ 
    secret:'prince', resave: false, saveUninitialized: false 
})); 

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

var authRouter = require('./admin/auth'); 
app.use("/admin/login", authRouter); 
var frontPageFlow = require('./index'); 
app.get('/', frontPageFlow, function (req, res) { 
    res.render('index', { 
     title: "Crowd District" 
    }); 
}); 

:私は私のapp.jsファイルで

var mongoose = require('mongoose'); var express = require('express'); var router = express.Router(); module.exports = router; var schemaOptions = { collection: "users" }; var schema = new mongoose.Schema({ id : String, token : String, displayName : String, username : String }, schemaOptions); module.exports = mongoose.model('User', schema); 

は何があって私は、または操作の順序を並べ替え、私は私のコールバックで取得していきません:

Cannot GET /auth/twitter/callback?oauth_token=enfwejngfon2804&oauth_verifier=LK35h5988gieunrgbr4ghghi 

事前にありがとうございました!

+0

実際のTwitter Key/Secretの場合は、https://apps.twitter.com/ NOWにアクセスして、取り消し/再生成してください。 – Prinzhorn

+0

@Prinzhornヘッドアップいただきありがとうございます。私は今再生しました。 –

答えて

0

ではなくという接頭辞を持つapp.use("/admin/login", authRouter);を使用しているため、ルートパスが正しくないため、コードには'/admin/login/auth/twitter/callback'が必要です。すべてのパスを整列させれば、より良い形になるでしょう。 app.useを呼び出すときは、マウントプレフィックスを避けることをおすすめします。彼らはこの種の混乱につながります。 app.use(authRouter);を使用してルートパスを絶対パスにしてください。彼らはもっと簡単に作業することができます。

関連する問題