【问题标题】:Laravel 5.2 Authentication Redirect with ParametersLaravel 5.2 带参数的身份验证重定向
【发布时间】:2016-06-02 08:38:38
【问题描述】:

因为,我在 SO 中找不到任何这样的问题,所以我写这篇文章希望这不是重复的......

我有一个使用 KnockoutJs 开发的页面,我用它来通过 Laravel 身份验证进行保护。基本上,我使用 Laravel 只是为了登录/注册,一旦用户登录/登录,他就会被重定向到 KnockoutJS 页面。

现在假设我有一个 URL,

http://example.com/mypage#q=some+parameters&p=somethingsomething

如果我与我的一位朋友共享该 URL,它显然会将我的朋友重定向到登录页面。现在,登录页面 URL(他被重定向到的地方)是

http://example.com/login#q=some+parameters&p=somethingsomething

但是一旦他登录,他就会被重定向到

http://example.com/mypage#

这显然是不对的,因为我需要参数在那里......

我的Routes页面如下,

Route::group(['middleware' => 'web'], function() {
    Route::auth();
    Route::get('/', 'MainController@index')->name('home.index');
});

Route::group(['middleware' => ['web','auth']], function () {
    Route::get('/mypage', 'MyController@index')->name('mypage.index');
});

我的 AuthController 设置了 redirectTo 网址

protected $redirectTo = '/mypage';

我应该做哪些更改(在 AuthController 中,或在 Routes 中?或在 MiddleWare 中)将用户重定向到

http://example.com/mypage#q=some+parameters&p=somethingsomething

登录后?

【问题讨论】:

  • 请搜索Redirect::intended()(在 laravel 文档中),干杯。重定向器上的预期方法会将用户重定向到他们在被身份验证过滤器捕获之前尝试访问的 URL。如果预期的目的地不可用,则可以为此方法提供一个备用 URI。
  • @Kyslik 它没有将我重定向回那个页面......当我登录时它让我进入http://example.com/mypage#。 laravel 是否考虑该方法的 url 中 # 之后给出的参数?

标签: laravel knockout.js laravel-5.2


【解决方案1】:

您可以在 Laravel 中使用预期的方法。

例如:

 public function authenticate()
    {
        if (Auth::attempt(['email' => $email, 'password' => $password])) {
            // Authentication passed...
            return redirect()->intended('dashboard');
        }
    }

这会将用户重定向到登录页面的预期 URL,或者如果没有预期的 URL,则重定向到仪表板。

https://laravel.com/docs/5.2/authentication#authenticating-users

【讨论】:

  • 它并没有将我重定向回那个页面......当我登录时它让我到达http://example.com/mypage#。 laravel 是否考虑该方法的 url 中 # 之后给出的参数?
  • 是的,它会考虑。我自己测试过,效果很好。
  • 感谢您的所有支持...但我相信 laravel 不支持...我终于使用 Javascript Cookies 帮助我将我重定向回旧页面...无论如何谢谢: )
【解决方案2】:

由于 Laravel 的 Redirect::intended 对我不起作用,我自己发布了这个问题的答案......

用户 Jquery/Javscript 在重定向后创建 cookie,如下所示:

(function(){
    'use strict';

    var intended = window.location.hash;
(intended.length > 0) ? jQuery.cookie('intended', '/app' + intended) : jQuery.cookie('intended', '/app');

})();

并将这些更改为 Laravel 5.2 的默认 AuthController

//Replace the default constructor with this
public function __construct(Request $request) {
    if(isset($_COOKIE['intended'])) {
        $this->setRedirect($request);
    }
}

//Copy paste it anywhere in your AuthController Class
protected function setRedirect($request) {
        $intended = (url($_COOKIE['intended']));
        $url['intended'] = $intended;
        $request->session()->put('url', $url);
}

希望这对某人有所帮助....

谢谢,:)

【讨论】:

    猜你喜欢
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2016-05-10
    • 2016-05-04
    • 2016-08-05
    • 2022-01-24
    • 2018-11-22
    相关资源
    最近更新 更多