重定向到登录页面并在 Symfony 2.8 中保留 URL GET 参数
Redirecting to login page and keeping URL GET parameters in Symfony 2.8
我正在创建一个 URL 以像这样的电子邮件发送:
$url = $this->getContainerInterface()->get('router')->generate(
'crmpiccobundle_view_subdomain_modify', [
'subdomain' => $site->getSubdomain(),
'subdomain_username' => $site->getSubdomain(),
], UrlGeneratorInterface::ABSOLUTE_URL),
URL 在我的控制器中由以下方法处理:
/**
* @Route(
* "/view/{subdomain}/modify",
* name="crmpiccobundle_view_subdomain_modify"
* )
*
* @Security("is_granted('IS_AUTHENTICATED_FULLY')")
* @Template("CRMPiccoBundle:Admin/View/Modify:index.html.twig")
*
* @param Request $request
* @param string $subdomain
*
* @return array
*/
public function subdomainModifyViewAction(Request $request, string $subdomain)
{
因此,路由 /view/{subdomain}/modify
需要身份验证,这意味着如果用户未登录,他们将被踢到登录屏幕。我想要实现的是将 'subdomain' 或 'subdomain_username' (我意识到这里有重复)传递到 URL 中的登录页面(例如 /login?subdomain_username=crmpicco
) 或其他方式。
我认为设置会话变量不合适,因为脚本 运行 由 cron 而不是浏览器中的用户。
我可以从 /view/crmpicco/modify?subdomain_username=crmpicco
升到 /login?subdomain_username=crmpicco
吗?
security.yml
:
access_control:
- {path: /, roles: IS_AUTHENTICATED_ANONYMOUSLY}
- {path: /admin, roles: ROLE_USER}
- {path: /admin/view, roles: ROLE_USER}
我最终实现它的方法是从会话 (_security.default.target_path
) 中提取目标 URL,成功登录后将重定向到该目标,然后解析它以提取URL 参数输出 (?username=crmpicco
).
// pull the target URL out of the session and parse it to get the ?username=crmpicco part
parse_str(parse_url($request->getSession()->get('_security.default.target_path'), PHP_URL_QUERY), $usernameArray);
$prefilledUsername = isset($usernameArray['username']) ? $usernameArray['username'] : '';
// ... then pass through $prefilledUsername to my Login view
我正在创建一个 URL 以像这样的电子邮件发送:
$url = $this->getContainerInterface()->get('router')->generate(
'crmpiccobundle_view_subdomain_modify', [
'subdomain' => $site->getSubdomain(),
'subdomain_username' => $site->getSubdomain(),
], UrlGeneratorInterface::ABSOLUTE_URL),
URL 在我的控制器中由以下方法处理:
/**
* @Route(
* "/view/{subdomain}/modify",
* name="crmpiccobundle_view_subdomain_modify"
* )
*
* @Security("is_granted('IS_AUTHENTICATED_FULLY')")
* @Template("CRMPiccoBundle:Admin/View/Modify:index.html.twig")
*
* @param Request $request
* @param string $subdomain
*
* @return array
*/
public function subdomainModifyViewAction(Request $request, string $subdomain)
{
因此,路由 /view/{subdomain}/modify
需要身份验证,这意味着如果用户未登录,他们将被踢到登录屏幕。我想要实现的是将 'subdomain' 或 'subdomain_username' (我意识到这里有重复)传递到 URL 中的登录页面(例如 /login?subdomain_username=crmpicco
) 或其他方式。
我认为设置会话变量不合适,因为脚本 运行 由 cron 而不是浏览器中的用户。
我可以从 /view/crmpicco/modify?subdomain_username=crmpicco
升到 /login?subdomain_username=crmpicco
吗?
security.yml
:
access_control:
- {path: /, roles: IS_AUTHENTICATED_ANONYMOUSLY}
- {path: /admin, roles: ROLE_USER}
- {path: /admin/view, roles: ROLE_USER}
我最终实现它的方法是从会话 (_security.default.target_path
) 中提取目标 URL,成功登录后将重定向到该目标,然后解析它以提取URL 参数输出 (?username=crmpicco
).
// pull the target URL out of the session and parse it to get the ?username=crmpicco part
parse_str(parse_url($request->getSession()->get('_security.default.target_path'), PHP_URL_QUERY), $usernameArray);
$prefilledUsername = isset($usernameArray['username']) ? $usernameArray['username'] : '';
// ... then pass through $prefilledUsername to my Login view