1

假设我有一个页面http://example.com/page1

我在这里使用 facebook 链接登录。

而且在另一个页面,page2,我已经放置了与 facebook 的登录链接。

我想要的是,在 page1 上单击带有 facebook 链接的登录后,它应该重定向到 page1,并且在单击 page2 上的登录链接时,它应该重定向到 Page2。

现在,它总是重定向到“example.com/”。

我在 Symfony2 中使用 Hwioauthbundle 与 fosuserbundle 集成

4

1 回答 1

7

1) 创建身份验证处理程序

<?php

namespace Company\Bundle\Handler;

use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Router;

class SecurityHandler implements AuthenticationSuccessHandlerInterface, AuthenticationFailureHandlerInterface
{

    private $router;

    public function __construct(Router $router)
    {
        $this->router = $router;
    }

    public function onAuthenticationSuccess(Request $request, TokenInterface $token)
    {
        $referer = $request->headers->get('referer');
        if (empty($referer)) {
            return new RedirectResponse($this->router->generate('homepage'));
        } else {
            return new RedirectResponse($referer);
        }
    }

    public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
    {
        // Edit it to meet your requeriments
        $request->getSession()->set('login_error', $error);
        return new \Symfony\Component\HttpFoundation\RedirectResponse($this->router->generate('login_route'));
    }

}

2)注册为服务

# src/Company/Bundle/Resources/config/services.yml
security_handler:
    class: Company\Bundle\Handler\SecurityHandler
    arguments:  [@router]

3) 配置 HWIO 将此服务用作处理程序

# app/config/security.yml
firewalls:
# ....
you_firewall:
    oauth:
        # ....
        resource_owners:
            # ....
        success_handler:    security_handler
        failure_handler:    security_handler # optional
于 2014-08-01T18:52:22.830 回答