laravel - 登录重定向丢失 url 哈希
Posted
技术标签:
【中文标题】laravel - 登录重定向丢失 url 哈希【英文标题】:laravel - login redirect loses the url hash 【发布时间】:2017-03-31 23:37:09 【问题描述】:当我想从我的网站分享一个页面 url,比如 mysite.com/page1#foo=bar
,或者想在我退出后访问这个页面时,我被重定向到 login
表单,因为 page1
路由在 @987654324 中@。
我的问题是我登录成功后被重定向到mysite.com/page1
,并且丢失了hash值。
(哈希值也没有保存在/login
上)
Laravel 有没有提供简单的方法来保存哈希? 由于哈希没有发送到服务器,我有点怀疑,但也许我在某个地方错过了一些东西!
否则我需要覆盖登录,也许用 JS 读取哈希并在登录后以某种方式将其重新注入到重定向中,但如果有简单的方法,我很想避免这样做:)
【问题讨论】:
是的,我正要说#fragment
没有发送到服务器。由于中间件在您能够执行任何客户端代码之前启动并重定向您,我不确定您将如何去做。我认为绕过它的方法是删除中间件并在检测到需要重定向时使用 JS 将片段传递给服务器。
或者,您可以更改 auth
中间件,使其不会重定向,而是返回一个视图,然后您可以在其中添加客户端代码,保留片段,然后执行使用 JS 的重定向。
听起来不错!我会调查并尝试找到一种方法来做到这一点!如果我能联系到/login#foo=bar
,我应该很高兴!
【参考方案1】:
多亏了 Mruf 的指导,我才得以查明真相。 不确定这是不是最好的实现,但它似乎正在工作。
基本上我按照Mruf建议的形式插入hash值,然后在AuthController
中扩展handleUserWasAuthenticated
函数
login.blade.php
<script type="text/javascript" >
$( document ).ready(function()
$('.urlHash').val(window.location.hash);
);
</script>
<form id="login-form" role="form" method="POST" action=" url('/login') ">
<input type="hidden" class="form-control urlHash" name="urlHash" value="">
....
</form>
AuthController.php
protected function handleUserWasAuthenticated(Request $request, $throttles)
if ($throttles)
$this->clearLoginAttempts($request);
if (method_exists($this, 'authenticated'))
return $this->authenticated($request, Auth::guard($this->getGuard())->user());
// old code: return redirect()->intended($this->redirectPath());
$newRequest = redirect()->intended($this->redirectPath());
$newRequest->setTargetUrl($newRequest->getTargetUrl() . $request->urlHash);
return $newRequest;
【讨论】:
【参考方案2】:一个简单的 JavaScript 就可以解决问题:
$("#login-form").submit(function()
e.preventDefault();
$(this).append("<input type='hidden' name='hash' value='"+window.location.hash+"'");
$(this).submit();
);
现在您可以访问请求对象中的哈希
function controllerAction(Request $request)
$hash = $request->get("hash");
// Parse Hash
....
// Redirect to somewhere
....
【讨论】:
我正在考虑做类似的事情,但这只是我认为的 50% 的过程。您的解决方案意味着我在/login#foo=far
上,但我不是。不过,一旦我到达那里,您的解决方案应该可以解决问题!
看起来我在测试不同的 url 时感到困惑。看起来它实际上正在重定向到/login#foo=bar
,因此它保留了哈希值,我应该能够测试您的解决方案!
另一种解决方案是$(window).on('hashchange',function()//submit hash with ajax to server);
,所以当哈希值改变时,你总是将它提交给服务器并在会话中持续存在。它未经测试,所以...以上是关于laravel - 登录重定向丢失 url 哈希的主要内容,如果未能解决你的问题,请参考以下文章