gpt4 book ai didi

symfony - AuthenticationSuccessHandler,登录后重定向和referer

转载 作者:行者123 更新时间:2023-12-04 02:40:49 26 4
gpt4 key购买 nike

我刚刚在这个论坛的帮助下添加了一个 AuthenticationSuccessHandler,它在用户通过 fosuserbundle 或 fosfacebookbundle 登录时在我的网站上实现重定向。当用户完成或未完成配置文件时,重定向会发生变化,如果它完成了,我希望它们被重定向到以前的位置,这就是我使用引用者变量的原因。
命名空间 Me\MyBundle\Handler;

使用 Symfony\Component\Security\Http\HttpUtils;
使用 Symfony\Component\HttpFoundation\RedirectResponse;
使用 Symfony\Component\HttpFoundation\Request;
使用 Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
使用 Symfony\Component\Security\Http\Authentication\DefaultAuthenticationSuccessHandler;


类 AuthenticationSuccessHandler 扩展 DefaultAuthenticationSuccessHandler {

protected $路由器;

公共(public)函数__construct(HttpUtils $httpUtils,数组$options,$router){
$this->router = $router;
父::__construct($httpUtils, $options);
}

公共(public)函数 onAuthenticationSuccess( 请求 $request, TokenInterface $token ) {

$user = $token->getUser();

if($user->getProfileComplete()!=1){
//重定向到配置文件编辑
$url = 'fos_user_profile_edit';
}别的{
$referer = $request->headers->get('referer');
if($referer == NULL){
//如果没有引用者则重定向到自定义url
$url = 'My_customurl';
}别的{
//重定向到引用者
$url = $推荐人;
}
}

return new RedirectResponse($this->router->generate($url));
}
}


我的 security.yml 注意到我在 fos_facebook 和 form_login 中都声明了 use_referrer:
防火墙:
主要的:
模式:^/
fos_facebook:
app_url:“http://apps.facebook.com/app”
server_url: "http://www.app.com"
登录路径:/用户/登录
check_path:/facebook/login_check
提供者:fos_facebook_provider
成功处理程序:my_auth_success_handler
use_referer: 真
表单登录:
提供者:fos_userbundle
csrf_provider:form.csrf_provider
登录路径:/用户/登录
check_path:/user/login_check
使用转发:假
成功处理程序:my_auth_success_handler
use_referer: 真
失败路径:空
登出:
路径:/用户/注销
匿名:~
记住账号:
key :mySuperKey
生命周期:4147200
小路: /
域名:~

当我登录并且我的个人资料没有完成时,我被成功重定向但是当它完成并且推荐人不为空时,我遇到了 500 个错误:
当我使用 Facebook 登录时,我收到 500 错误:“无法为命名路由“http://app.com/app_dev.php/user/login”生成 URL,因为这样的路由不存在。” Firefox中的网址是:“http://app.com/app_dev.php/facebook/login_check”
当我使用表单登录时,我收到 500 错误:“无法为命名路由“http://app.com/app_dev.php/user/login”生成 URL,因为这样的路由不存在。” Firefox中的网址是:“http://app.com/app_dev.php/user/login_check”
任何想法,我都快疯了。我认为这是因为引荐已经存储了用户/登录名,并且当它转到 login_check 时再次转到用户/登录名。

最佳答案

您正在尝试使用实际 url 生成路由,而不是路由名称。试试这个代码:

if ($user->getProfileComplete() != 1) {
$url = $this->router->generate('fos_user_profile_edit');
} else {
$referer = $request->headers->get('referer');
if ($referer == NULL) {
$url = $this->router->generate('My_customurl');
} else {
$url = $referer;
}
}

return new RedirectResponse($url);

关于symfony - AuthenticationSuccessHandler,登录后重定向和referer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19984244/

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