MEAN + Passportjs (Facebook) - 如何在服务器不重定向的情况下使用 angular 处理护照回调
MEAN + Passportjs (Facebook) - How do I handle the passport callback with angular without redirects by the server
我正在使用 MEAN Stack + Passport(用于 facebook)构建一个示例身份验证应用程序。我希望服务器不针对特定类型的客户端进行编码(在本例中为 angular)。我想让护照模块 return 状态和数据,让客户决定在每种情况下必须做什么?
// facebook -------------------------------
// send to facebook to do the authentication
app.get('/auth/facebook',
passport.authenticate('facebook', { scope : 'email' })
);
// handle callback
app.get('/auth/facebook/callback', function(req, res) {
passport.authenticate('facebook', function(err, user, info) {
if (err) { return res.json(err) }
else if (user.error) { return res.json({ error: user.error }) }
else { return res.json({ redirect: '/profile', user: user }) }
})(req, res);
});
我不确定我应该如何处理 angular 中的回调,因为这条路由上没有成功处理程序,因为 facebook 正在调用该端点而不是 angular。
非常感谢您的提前帮助。
如果您使用 ui-router
,则可以使用 stateChangeStart
:
假设用户将使用 Facebook 登录的页面名为 /singin,状态为 singin,您可以触发此事件并处理下一个状态:
$rootScope.$on('$stateChangeStart', (event, next, params, fromState) => {
Auth.promise.then(() => {
// Look for a redirection state and default to homepage
if ($rootScope.isLoggedIn && fromState === "singin") return $state.go("whatever")
})
})
同时为了防止此条件为真时出现任何默认重定向,您可以使用:
event.preventDefault()
因此您的代码将如下所示:
$rootScope.$on('$stateChangeStart', (event, next, params, fromState) => {
event.preventDefault()
Auth.promise.then(() => {
// Look for a redirection state and default to homepage
if ($rootScope.isLoggedIn && fromState === "singin") return $state.go("whatever")
})
})
我正在使用 MEAN Stack + Passport(用于 facebook)构建一个示例身份验证应用程序。我希望服务器不针对特定类型的客户端进行编码(在本例中为 angular)。我想让护照模块 return 状态和数据,让客户决定在每种情况下必须做什么?
// facebook -------------------------------
// send to facebook to do the authentication
app.get('/auth/facebook',
passport.authenticate('facebook', { scope : 'email' })
);
// handle callback
app.get('/auth/facebook/callback', function(req, res) {
passport.authenticate('facebook', function(err, user, info) {
if (err) { return res.json(err) }
else if (user.error) { return res.json({ error: user.error }) }
else { return res.json({ redirect: '/profile', user: user }) }
})(req, res);
});
我不确定我应该如何处理 angular 中的回调,因为这条路由上没有成功处理程序,因为 facebook 正在调用该端点而不是 angular。
非常感谢您的提前帮助。
如果您使用 ui-router
,则可以使用 stateChangeStart
:
假设用户将使用 Facebook 登录的页面名为 /singin,状态为 singin,您可以触发此事件并处理下一个状态:
$rootScope.$on('$stateChangeStart', (event, next, params, fromState) => {
Auth.promise.then(() => {
// Look for a redirection state and default to homepage
if ($rootScope.isLoggedIn && fromState === "singin") return $state.go("whatever")
})
})
同时为了防止此条件为真时出现任何默认重定向,您可以使用:
event.preventDefault()
因此您的代码将如下所示:
$rootScope.$on('$stateChangeStart', (event, next, params, fromState) => {
event.preventDefault()
Auth.promise.then(() => {
// Look for a redirection state and default to homepage
if ($rootScope.isLoggedIn && fromState === "singin") return $state.go("whatever")
})
})