登录重定向丢失url哈希值


login redirect loses the url hash

当我想从我的网站共享一个页面url,比如mysite.com/page1#foo=bar,或者想在我注销时访问这个页面,我被重定向到login表单,因为page1路由在auth middleware中。

我的问题是,在我成功登录后,我被重定向到mysite.com/page1,我失去了哈希值。

(哈希值也不保存在/login上)

是否有任何简单的方法由Laravel提供保持哈希?由于哈希值没有发送到服务器,我有点怀疑,但也许我错过了什么地方!

否则我需要覆盖登录,也许用JS读取哈希,并以某种方式在登录后的重定向中重新注入它,但很想避免这样做,如果有一个简单的方法:)

感谢Mruf的指导,我设法弄清了这件事的真相。我不确定这是不是最好的实现,但它似乎是有效的。

基本上,我按照Mruf建议的形式插入哈希值,然后在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;
}

一个简单的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
    ....
}