我正在实现facebook登录按钮,并且成功登录后,没有重定向,我正在尝试重定向到同一页面,并且该页面不会重新加载。
我的框架代码(在这里不运行任何功能,我只对重定向感兴趣):
<div id="fb-root"></div>
<script async defer crossorigin="anonymous" src="https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v6.0&appId=881911462250499&autoLogAppEvents=1"></script>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'my id',
cookie : true, // Enable cookies to allow the server to access the session.
xfbml : true, // Parse social plugins on this webpage.
version : 'v6.0' // Use this Graph API version for this call.
});
FB.getLoginStatus(function(response) {
FB.api('/me', { locale: 'tr_TR', fields: 'email,name' }, function (response) {
});
});
}
</script>
我确实在这里的Facebook开发人员上设置了有效的OAuth重定向URI:
成功登录后手动刷新页面时,可以看到我已经登录并且有令牌。单击按钮并登录后,它似乎没有重定向。可能是什么原因?
我想如果登录成功,您可以使用JavaScript刷新当前页面。试试:
location.reload();
OAuth重定向URL将在您手动bulid a login flow时调用。
实现Facebook登录的最简单,最快的方法是使用我们针对JavaScript,iOS和Android的官方SDK。我们建议您遵循针对这些平台的单独指南。
但是,如果您需要为应用程序不使用我们的SDK]实现基于浏览器的登录,例如在本地桌面应用程序(例如Windows 8)的Web视图中,或者完全使用服务器的登录流程,边码,您可以构建一个使用浏览器重定向为您自己的登录流程。
如果使用的是FB登录按钮,则为callback function will be called instead。
加载网页时的第一步是确定某个人是否已经使用Facebook Login登录到您的网页。调用FB.getLoginStatus将启动对Facebook的调用以获取登录状态。 然后Facebook用结果调用您的回调函数。
如果要使用FB登录按钮,则可以执行以下操作:
javascript
FB.getLoginStatus(response => { if (response.status === 'connected') { const uid = response.authResponse.userID; const accessToken = response.authResponse.accessToken; FB.api('/me', { locale: 'tr_TR', fields: 'email,name' }, response => { // if you're using jQuery $.post( "https://your.server/loginEndpoint", { provider: 'facebook', uid, accessToken, email, // name }, response => { if (response.success) { location.href = "https://your.site/landing-page" } } ) // if you using Axios Axios.post("https://your.server/loginEndpoint", { provider: 'facebook', uid, accessToken, email, // name }).then(response => { if (response.success) { location.href = "https://your.site/landing-page" } }); }); } })
服务器端(伪代码)
provider = request.provider
uid = request.uid
email = request.email
user = db.findBySocialID(provider, uid, email)
if (user) {
login(user)
response.send(success: true)
} else {
response.send(success: false)
}