1

私はMEANが初めてです。新しい MEAN アプリケーション用に「facebook」ログインを作成しようとしています。「passport-facebook」からの戦略を利用しています。

Facebook ユーザー用に新しいスキーマを作成した User.js ファイルのコードは次のとおりです。

var mongoose = require('mongoose');

var fbuserSchema = mongoose.Schema({
    id: String,
    token: String,
    email: String,
    name: String
});

var fbUser = mongoose.model('fbUser', fbuserSchema);

私のpassport.jsファイルには次のようなものがあります:

var fbUser = mongoose.model('fbUser'),
    FacebookStrategy = require('passport-facebook').Strategy;

module.exports = function(){
passport.serializeUser(function (user, done) {
        if (user) {
            done(null, user.id);
        }
    });

    passport.deserializeUser(function (id, done) {
        User.findOne({_id: id }).exec(function (err, user) {
            if (user) {
                return done(null, user);
            } else {
                return done(null, false);
            }
        });
    });

    passport.use(new FacebookStrategy({
            'clientID' : 'xxxxxxxxxxxxxxx',
            'clientSecret' : 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
            'callbackUrl' : 'http://localhost:3030/auth/facebook/callback'
        },
        function(accessToken, refreshToken, profile, done) {
            process.nextTick(function(){
                fbUser.findOne({'id':profile.id}, function(err, user){
                    if(err){
                        return done(err);
                    }
                    if(user){
                        return done(null, user);
                    }
                    else{
                        var newUser = new fbUser();
                        newUser.id = profile.id;
                        newUser.token = accessToken;
                        newUser.name = profile.name.givenName + ' ' + profile.name.familyName;
                        newUser.email = profiel.emails[0].value;

                        newUser.save(function(err){
                            if(err){
                                throw err;
                            }
                            return done(null, newUser);
                        });
                    }
                });
            });
        })
    )
}

私のroutes.jsには次のものがあります:

var auth = require('./auth'),
    users = require('../controllers/users'),
    mongoose = require('mongoose'),
    User = mongoose.model('User'),
    fbUSer = mongoose.model('fbUser'),
    passport = require('passport');

module.exports= function(app) {

    app.get('/api/users', auth.requiresRole('admin'), users.getUsers);
    app.post('/api/users', users.createUser);
    app.put('/api/users', users.updateUser);

    app.get('/partials/*', function (req, res) {
        res.render('../../public/app/' + req.params[0]);
    });

    app.post('/login', auth.authenticate);

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

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

    app.post('/logout', function(req,res){
        req.logout();
        res.end();
    });

    app.get('*', function (req, res) {
        res.render('index', {
            bootstrappedUser: req.user
        });
    });

}

私は以下を提供しました:

a(href="/auth/facebook") Facebook

私のlogin.jadeファイルで。

このリンクをクリックすると、次のようなエラーが表示されます。

The parameter redirect_uri is required

誰かがこの問題について私を助けてくれますか。

私のフェイスブックのURLは次のとおりです。

https://www.facebook.com/v2.2/dialog/oauth?response_type=code&redirect_uri=&client_id=xxxxxxxxxxxxxxxx

これには「redirect_uri=」の値がありません。どうすればそれを取得できますか?

4

1 に答える 1

0

MEAN にはすでに Facebook のサポートがありました。config/strategies/ の下の facebook.js に移動します。Facebook Web サイトに入力したものに従って、Facebook ID とアプリ シークレットを変更します。それでおしまい

于 2015-09-07T14:52:40.630 に答える