나는 인증을 위해 페이스 북 전략과 함께 여권을 사용합니다. 저는 클라이언트 측에 각도를 사용하고 서버 측에 표현합니다. 사용자가 Facebook에서 로그인하여 성공적으로 인증되면 다시 기본 페이지로 리디렉션됩니다. 그러나 나는 돌아올 때 항상 빈 페이지를 얻는다. 새로 고침 후 페이지가 다시 정상적으로 나타납니다.특급 여권 인증 빈 페이지에서 리디렉션
facebook.js : 여기
내 구현'use strict';
var passport = require('passport'),
url = require('url'),
FacebookStrategy = require('passport-facebook').Strategy,
config = require('../config'),
user = require('../../app/user/user.server.controller');
module.exports = function() {
// Use the Passport's Facebook strategy
passport.use(new FacebookStrategy({
clientID: config.facebook.clientID,
clientSecret: config.facebook.clientSecret,
callbackURL: config.facebook.callbackURL,
profileFields: ['id', 'displayName', 'email'],
passReqToCallback: true
},
function(req, accessToken, refreshToken, profile, done) {
// Set the user's provider data and include tokens
var providerData = profile._json;
providerData.accessToken = accessToken;
providerData.refreshToken = refreshToken;
var providerUserProfile = {
username: profile.displayName,
email: profile.email,
provider: 'facebook',
providerId: profile.id,
providerData: providerData
};
// Save the user OAuth profile
user.saveOAuthUserProfile(req, providerUserProfile, done);
}
));
};
설정/passport.js
'use strict';
var passport = require('passport'),
mongoose = require('mongoose');
module.exports = function() {
var User = mongoose.model('User');
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findOne({
_id: id
}, '-password -salt', function(err, user) {
done(err, user);
});
});
require('./strategies/local.js')();
require('./strategies/twitter.js')();
require('./strategies/facebook.js')();
require('./strategies/google.js')();
};
user.server.route.js
// Invoke 'strict' JavaScript mode
'use strict';
// Load the module dependencies
var user = require('./user.server.controller'),
passport = require('passport');
// Define the routes module' method
module.exports = function(app) {
// Set up the 'signup' routes
app.route('/signup')
.get(user.renderSignup)
.post(user.signup);
// Set up the 'signin' routes
app.route('/signin')
.get(user.renderSignin)
.post(passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/signin',
failureFlash: true
}));
// Set up the Facebook OAuth routes
app.get('/oauth/facebook', passport.authenticate('facebook', {
failureRedirect: '/signin'
}));
app.get('/oauth/facebook/callback', passport.authenticate('facebook', {
failureRedirect: '/signin',
successRedirect: '/'
}));
// Set up the Twitter OAuth routes
app.get('/oauth/twitter', passport.authenticate('twitter', {
failureRedirect: '/signin'
}));
app.get('/oauth/twitter/callback', passport.authenticate('twitter', {
failureRedirect: '/signin',
successRedirect: '/'
}));
// Set up the Google OAuth routes
app.get('/oauth/google', passport.authenticate('google', {
scope: [
'https://www.googleapis.com/auth/userinfo.profile',
'https://www.googleapis.com/auth/userinfo.email'
],
failureRedirect: '/signin'
}));
app.get('/oauth/google/callback', passport.authenticate('google', {
failureRedirect: '/signin',
successRedirect: '/'
}));
// Set up the 'signout' route
app.get('/signout', user.signout);
};
index.ejs
<!DOCTYPE html>
<html xmlns:ng="http://angularjs.org">
<head>
<title><%= title %></title>
</head>
<body>
<section ng-view></section>
<script type="text/javascript">
window.user = <%- user || 'null' %>;
</script>
<script type="text/javascript" src="/public/lib/angular/angular.js"></script>
<script type="text/javascript" src="/public/lib/angular-route/angular-route.js"></script>
<script type="text/javascript" src="/public/lib/angular-resource/angular-resource.js"></script>
<script type="text/javascript" src="/public/article/article.client.module.js"></script>
<script type="text/javascript" src="/public/article/article.client.controller.js"></script>
<script type="text/javascript" src="/public/article/article.client.route.js"></script>
<script type="text/javascript" src="/public/article/article.client.resource.js"></script>
<script type="text/javascript" src="/public/projectTemplate/projectTemplate.client.module.js"></script>
<script type="text/javascript" src="/public/projectTemplate/projectTemplate.client.controller.js"></script>
<script type="text/javascript" src="/public/projectTemplate/projectTemplate.client.route.js"></script>
<script type="text/javascript" src="/public/projectTemplate/projectTemplate.client.resource.js"></script>
<script type="text/javascript" src="/public/projectTemplate/taskTemplate.client.resource.js"></script>
<script type="text/javascript" src="/public/index/index.client.module.js"></script>
<script type="text/javascript" src="/public/index/index.client.route.js"></script>
<script type="text/javascript" src="/public/index/index.client.controller.js"></script>
<script type="text/javascript" src="/public/user/user.client.module.js"></script>
<script type="text/javascript" src="/public/user/authentication.client.service.js"></script>
<script type="text/javascript" src="/public/application.js"></script>
</body>
</html>
index.client.view.html :
<section ng-controller="IndexController">
<div data-ng-show="!authentication.user">
<a href="/signup">Signup</a>
<a href="/signin">Signin</a>
</div>
<div data-ng-show="authentication.user">
<h1>Hello <span data-ng-bind="authentication.user.fullName"></span></h1>
<a href="/signout">Signout</a>
<ul>
<li><a href="/#!/article">List Articles</a></li>
<li><a href="/#!/article/create">Create an Article</a></li>
</ul>
<ul>
<li><a href="/#!/projectTemplate">List Project Templates</a></li>
<li><a href="/#!/projectTemplate/create">Create a Project Template</a></li>
</ul>
</div>
</section>
편집 : 나는이 책의 샘플 코드를 사용하고 있습니다 : 당신은 여기에 코드를 다운로드 할 수
https://www.packtpub.com/books/content/support/17478
. 마지막 장을 선택하십시오. 그것은 페이 스북 전략에 몇 가지 버그가있다, 당신은 이메일 필드 (위의 코드를 참조하십시오)
같은 흰색 화면 동작이 있습니다. 나는 크롬과 사파리를 시험해 보았습니다.
이 책의 샘플 코드를 사용 중입니다. 여기에서 다운로드하십시오 : https://www.packtpub.com/books/content/support/17478 – John
위에서 언급 한 두 가지를 시도 했습니까? 각도가없고 노드 측에서 페이지가 로깅되지 않고 그것을하고 있니? – PureText
예. 6 장을 다운로드하십시오. 각도가 없습니다. (저는 앵귤러 문제라고 생각하지 않습니다. index.html은 네트워킹 디버그 패널에서 다운로드되지 않습니다) – John