0

この問題に関する同様の投稿を見たことがありますが、それらの回答のどれも私の問題を解決していないようです。欠落しているハイフンをいくつかの回答に含めます。

Passport を使用して認証を取得するためにユーザーを Twitter に送信すると、ブラウザから、コールバック URL の GET ハンドラがないと表示されます。私はそれを処理していると信じているので、私は非常に混乱していますが、機能していません。

私の app.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"
    });
});

私の Auth.js ファイルには次のものがあります。

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

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

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

4

1 に答える 1

0

そのファイル内のすべてのルートにプレフィックスをapp.use("/admin/login", authRouter);持たせるために使用しているため、ルート パスが正しくありません。すべての道を一直線に並べると、体調が良くなります。を呼び出すときは、マウント プレフィックスを避けることをお勧めします。彼らはこの種の混乱を招くだけです。ルートパスを使用して絶対パスにするだけです。それらは、はるかに簡単に操作できます。'/admin/login''/auth/twitter/callback''/admin/login/auth/twitter/callback'app.useapp.use(authRouter);

于 2016-10-23T17:18:38.227 に答える