facebook - HWIOAuthBundle - FOSUserBundle - Symfony 2 - 使用 facebook 登录后重定向到自定义路径

标签 facebook symfony oauth hwioauthbundle

用户使用Facebook账号登录后反射(reflect)如下问题:即重定向到如下路由/#_=_

我怎样才能将它重定向到这个路由:/ 或者更多到这个 /#

在客户端,我使用主干。

最佳答案

采用@Prynz 的想法,我们可以更进一步,以这种方式创建“重定向到页面用户来自”:

1) 在您的防火墙中,注意删除以下行:

# security.yml

# ...
logout: true
logout:
    path: /logout
    target: /

因为我们将自己实现注销以避免重定向到指定的 target

2) 将@Prynz 的解决方案添加到您的 security.yml(或 config.yml,具体取决于您的实现)

oauth:
    resource_owners:
        google: "/login/check-google"
        facebook: "/login/check-facebook"
        twitter: "/login/check-twitter"
        sensio_connect: "/login/check-sensio-connect"
    login_path: /login
    failure_path: /login
    default_target_path: /welcome # THIS LINE CONTRIBUTES TO THE MAGIC
    oauth_user_provider:
        service: app.oauth_user_provider

3) 在您的路由中,在 HWIO 的导入之前添加一个新的 Controller (此处为 LoginController):

fuz_app_login:
    resource: "@FuzAppBundle/Controller/LoginController.php"
    type:     annotation
    prefix:   /

4)创建对应的 Controller :

<?php

namespace Fuz\AppBundle\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

class LoginController
{

    /**
     * @Route("/login", name="login")
     * @Method({"GET"})
     */
    public function loginAction(Request $request)
    {
        if ($this->getUser())
        {
            // already-logged user accessed /login
            return $this->redirect($request->headers->get('referer'));
        }
        else
        {
            // redirect to the login page
            return $this->forward('HWIOAuthBundle:Connect:connect');
        }
    }

    /**
     * @Route("/logout", name="logout")
     * @Method({"GET"})
     */
    public function logoutAction(Request $request)
    {
        // we do a manual logout just to redirect the user to where he comes from
        $this->container->get('security.context')->setToken(null);
        return $this->redirect($request->headers->get('referer'));
    }

    /**
     * @Route("/connect/{service}", name="connect")
     * @Method({"GET"})
     */
    public function connectAction(Request $request, $service)
    {
        // we overwrite this route to store user's referer in the session
        $this->get('session')->set('referer', $request->headers->get('referer'));
        return $this->forward('HWIOAuthBundle:Connect:redirectToService', array('service' => $service));
    }

    /**
     * @Route("/welcome", name="welcome")
     * @Method({"GET"})
     */
    public function welcomeAction()
    {
        // on login success, we're redirected to this route...
        // time to use the referer we previously stored.
        $referer = $this->get('session')->get('referer');
        if (is_null($referer))
        {
            return new RedirectResponse($this->generateUrl('home'));
        }
        return new RedirectResponse($referer);
    }

}

5) 放松。

关于facebook - HWIOAuthBundle - FOSUserBundle - Symfony 2 - 使用 facebook 登录后重定向到自定义路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18890917/

相关文章:

facebook - 首次登录Facebook时Cookie必填错误(Atom-Electron应用程序)

c# - 如何使用 OAuth 处理多个帐户?

Facebook 数据不匹配(Excel 和 FQL)

git - 为 Symfony2 项目 : why add web/bundles folder to gitignore 设置 GIT

symfony - 请求未知列类型 "int"

php - 使用 PHP 变量作为 MySQL 中的表名

symfony - 如何从 Symfony2 config.yml 读取配置设置?

java - Spring security Oauth 2 在/oauth/token上重定向行为

c# - Unity 中的 OAuth2 身份验证和操作

oauth - NetSuite - 当我使用 OAuth 时,返回 header 不是 NLAuth 方案错误