私はノードと角度プログラミングを初めて利用しています。私はノードと角度jを使ってオープン認証を試みています。ブラウザのコンソールは、次のようなエラーがスローされます -ノードJSと角度JSを使用したFacebookオープン認証
XMLHttpRequestが= https://www.facebook.com/dialog/oauth?response_type=code&redirect_uri=http% ...%3A3000%2Fauth%2Ffacebook%2Fcallback &範囲=メール&のclient_idをロードすることはできません。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しません。 Origin 'http://localhost:3000'はアクセスできません。
私は、オープン認証にpassport-facebookとpassportモジュールを使用しています。
server.js
var auth = require('./app/routes/auth');
passport.serializeUser(function(user, done) {
done(null, user.id);
});
// used to deserialize the user
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
app.use('/auth', auth);
APP /ルート/ auth.js
var express = require('express'),
passport = require('passport'),
router = express.Router(),
mongoDB = require('mongoDB').MongoClient,
GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
require('../configs/passport')(passport, mongoDB);
router.post('/login',
passport.authenticate('local', {
successRedirect: '/profile',
failureRedirect: '/user/loginFailure'
})
);
router.get('/facebook', passport.authenticate('facebook', { scope : 'email' }));
// handle the callback after facebook has authenticated the user
router.get('/facebook/callback',
passport.authenticate('facebook',
{
successRedirect : '/profile',
failureRedirect : '/'
}
));
router.get('/loginFailure', function(req, res){
res.send("Login Failed..");
});
module.exports = router;
var FacebookStrategy = require('passport-facebook').Strategy;
var fbConfig = require("./facebook.json");
module.exports = function(passport){
passport.use(new FacebookStrategy({
clientID : fbConfig.appID,
clientSecret : fbConfig.appSecret,
callbackURL : fbConfig.callbackURL
},
function(token, refreshToken, profile, done) {
process.nextTick(function() {
var newUser = {};
newUser.facebook.id = profile.id;
newUser.facebook.token = token;
newUser.facebook.name = profile.name.givenName + ' ' + profile.name.familyName;
newUser.facebook.email = profile.emails[0].value;
return done(null, newUser);
});
}));
};
角度コントローラ:
以下コードです。 Facebookログインボタンのクリックイベントを処理します。
app.controller("authCtrl",["$scope", '$resource', function($scope, $resource){
$scope.userid = "";
$scope.password = "";
$scope.authenticate = function(type){
if(type === 'local'){
var login = $resource('http://localhost:3000/auth/login');
login.save({username: $scope.userid, password: $scope.password });
}
else if(type === 'facebook'){
var login = $resource('http://localhost:3000/auth/facebook');
login.get();
}
}
}])
このエラーを修正する際にお役立てください。
はい私はアプリケーションを登録しました。 [詳細設定]タブの[有効なOAuthリダイレクトURI]フィールドのappID、appSecret、およびリダイレクトURL。これは正しいことですか? – Navaneeth
はい。 [link](https://auth0.com/docs/connections/social/facebook)の詳細については、このリンクを参照してください。提供されたリンクのセクションのAuth0部分は無視してください。あなたが受け取っているエラーは、クロス・オリジン・リソース共有(略してCORS)に関連しています.FBでアプリケーションを登録すると起こりません。 –
はい。これはまさに私がやったことです。また、エラーのURL(https://www.facebook.com/dialog/oauth?response_type=code&redirect_uri=http%...%3A3000%2Fauth%2Ffacebook%2Fcallback&scope=email&client_id=clientID)をクリックすると、それは私に認証同意のページを与え、成功裏に私をログインさせました。 – Navaneeth