gpt4 book ai didi

php - Facebook 注销无法正常工作

转载 作者:行者123 更新时间:2023-11-28 01:51:46 25 4
gpt4 key购买 nike

我已经根据其文档在带有 FOSUserBundle 的 SonataUserBundle 中实现了 FOSFFacebookBundle。

config.yml : 
fos_facebook:
alias: facebook
app_id: xxxxxxxx597242
secret: xxxxxxxxxxxxxxxxxxxx2a6e7
cookie: true
permissions: [email, user_birthday, user_location]
services:
fos_facebook.user.login:
class: Webmuch\UserBundle\Security\User\Provider\FacebookProvider
arguments:
facebook: "@fos_facebook.api"
userManager: "@fos_user.user_manager"
validator: "@validator"

security.yml:
providers:
chain_provider:
chain:
providers: [fos_userbundle,fos_facebook_provider]
fos_userbundle:
id: fos_user.user_provider.username_email
fos_facebook_provider:
id: fos_facebook.user.login
firewalls:
main:
pattern: ^/
fos_facebook:
app_url: "https://developers.facebook.com/apps/xxxxxxxx597242"
server_url: "http://localhost/Mysite/web/app_dev.php/"
login_path: /login
check_path: /login_check
provider: fos_facebook_provider
default_target_path: /
form_login:
provider: fos_userbundle
login_path: /login
use_forward: false
check_path: /login_check
failure_path: null
logout:
path: /logout
target: /
anonymous: true

base.html.twig:

{{ facebook_initialize({'xfbml': true, 'fbAsyncInit': 'onFbInit();'}) }}
{{ facebook_login_button({'autologoutlink': true}) }}

{% block javascripts %}
<script>
function goLogIn(){
window.location.href = "{{ path('fos_facebook_security_check') }}";
}

function onFbInit() {
if (typeof(FB) != 'undefined' && FB != null ) {
FB.Event.subscribe('auth.statusChange', function(response) {
if (response.session || response.authResponse) {
setTimeout(goLogIn, 500);
} else {
window.location.href = "{{ path('fos_user_security_logout') }}";
}
});
}
}
</script>
{% endblock %}

我的 Facebook 提供商和用户实体是按照文档设置的。

它工作得很好,但现在更新了新版本后,在我的站点中进行身份验证后成功登录,但是当我单击 Facebook 注销按钮时,现在只有 Facebook 注销,而在我的站点中我仍在登录条件,即它不会破坏我的站点身份验证 session 。

我不知道我做错了什么。

最佳答案

经过一番苦思冥想,我终于找到了错误的根本原因;它是供应商中 Symfony 包的安全组件,其中位于 HTTP 文件夹中的防火墙文件夹中,文件“AbstractAuthenticationListener.php”在第 190 行有问题

$token = $this->securityContext->getToken();
if ($token instanceof UsernamePasswordToken && $this->providerKey === $token->getProviderKey()) {
$this->securityContext->setToken(null);
}

Since Facebook api uses "FacebookAccessToken" instead of the "UsernamePasswordToken" so facebook logout is simply destroy its own(facebook) session but unable to destroy the site authentication session .

So if we just set

$this->securityContext->setToken(null)  

在上面四行的地方,问题已经解决,一切正常。我知道更换供应商不是一个好主意,但它工作得很好,我欢迎任何更多的想法。

关于php - Facebook 注销无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19677433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com