当前位置: 首页 > 知识库问答 >
问题:

身份验证成功处理程序,登录和引用后重定向

通飞尘
2023-03-14

我刚刚在这个论坛的帮助下添加了一个AuthenticationSuccessHandler,当用户通过fosuserbundle或fosfacebookbundle登录时,它在我的站点上实现了重定向。当用户完成或未完成配置文件时,重定向会发生变化,如果已经完成,我希望将它们重定向到以前的位置,这就是我使用referer变量的原因。

    namespace Me\MyBundle\Handler;
    
    use Symfony\Component\Security\Http\HttpUtils;
    use Symfony\Component\HttpFoundation\RedirectResponse;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
    use Symfony\Component\Security\Http\Authentication\DefaultAuthenticationSuccessHandler;
    
    
    class AuthenticationSuccessHandler extends DefaultAuthenticationSuccessHandler {
    
        protected $router;
    
        public function __construct( HttpUtils $httpUtils, array $options, $router) {
        $this->router = $router;
            parent::__construct( $httpUtils, $options );
        }
    
        public function onAuthenticationSuccess( Request $request, TokenInterface $token ) {
            
        $user = $token->getUser();
        
        if($user->getProfileComplete()!=1){
    //redirects to profile editing
            $url = 'fos_user_profile_edit';
        }else{
            $referer = $request->headers->get('referer');
            if($referer == NULL){
    //redirects to custom url if there is not any referer
                $url = 'My_customurl';
            }else{
    //redirects to the referer
                $url = $referer;
            }
        }
    
        return new RedirectResponse($this->router->generate($url));
        }
    }

security.yml,我已在fos_facebook和form_login宣布use_referrer:

firewalls:
        main:
            pattern: ^/
            fos_facebook:
              app_url: "http://apps.facebook.com/app"
              server_url: "http://www.app.com"
              login_path: /user/login
              check_path: /facebook/login_check
              provider: fos_facebook_provider
              success_handler: my_auth_success_handler
              use_referer: true
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
                login_path: /user/login
                check_path: /user/login_check
                use_forward: false
                success_handler: my_auth_success_handler
                use_referer: true
                failure_path: null
            logout:
                path: /user/logout
            anonymous: ~
            remember_me:
                  key:      mySuperKey
                  lifetime: 4147200
                  path:     /
                  domain:   ~

当我登录时,我没有完成我的个人资料,我成功地重定向,但当它完成时,引用者不是空的,我有500个错误:

当我使用Facebook登录时,我收到一个500错误:“无法为指定路线生成URL”http://app.com/app_dev.php/user/login“因此,该路由不存在。”firefox中的url是:http://app.com/app_dev.php/facebook/login_check"

当我用表单登录时,我得到一个500的错误:“无法为命名的路由生成网址”http://app.com/app_dev.php/user/login“因为这样的路由不存在。”火狐中的网址是这样的:“http://app.com/app_dev.php/user/login_check”

任何想法,我都快疯了。我认为这是因为推荐已经存储了用户/登录,当它转到login_check再次转到用户/登录。

共有1个答案

穆理
2023-03-14

您正在尝试使用实际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);
 类似资料:
  • 我试图在登录symfony2应用程序后实现重定向,以便在我的用户是否有一个属性时重定向。我已在项目的Handler文件夹中创建了AuthenticationSuccessHandler.php类: 但是当我登录时,我得到一个错误: 注意:未定义的属性:Me\MyBundle\Handler\AuthenticationSuccessHandler::$router in/var/www/MyBun

  • Flatter Web(Navigator 2.0/Router API):如何处理经过身份验证的路由及其成功身份验证后的重定向? e、 g.我的系统中有这种路由 若用户直接打开这个URL,我想让用户先登录,那个么路由将被重定向到。。 一旦登录,我想用户导航以前打开的网址,如果有任何其他主页。。 似乎这种事情可能会有所帮助,任何想法——我们如何才能实现类似的事情?https://stackover

  • 在从主机推送docker映像(成功登录后)时,我得到了“未经授权:需要身份验证”。 详情如下。 Docker版本:1.9.1(客户端和服务器) /var/log/messages显示403,我不知道这个docker。见下文。 非常感谢您的帮助,如果您需要更多信息,请告诉我。我也用-f推了推。不走运!

  • 我使用Laravel 5.2。我想问一个问题。如何更改重定向登录表单在laravel当我们已经做登录?我使用的是来自Php artisan make: auth的auth。 我已经登录并重定向到localhost:8000/admin 然后我再次打开localhost:8000/登录。它将重定向到“/”或localhost:8000/ 我的问题是如何将“/”更改为“/”管理员“?因此,即使我已经登

  • 使用,https://github.com/firebase/FirebaseUI-Android/tree/master/codelabs/chat作为登录的参考,我在键入时似乎遇到了问题 我只能键入Auth的提供者,而不能键入,为什么会这样,它提示我键入社会提供者。

  • 我使用Spring Security 4.2.1来认证一个SpringMVC webapp。我有一个非常难以捉摸的问题,似乎有时工作,有时被打破(打破比它的工作)。 问题如下: > < li> 在尝试登录时,AuthenticationProvider正确地验证了用户,并且我在日志中看到了验证成功(并且经过验证的用户具有所需的所有权限,等等,我可以在日志中看到它们)。 然后,框架似乎为用户清除了S