2016-02-20 53 views
0

,因为我无法找到任何像这样的问题在于是,我写这篇文章,希望这不是开发一个重复...Laravel 5.2认证重定向与参数

我有一个页面使用KnockoutJs我正在使用通过Laravel身份验证保护。基本上,我使用Laravel仅用于登录/注册的目的,一旦用户登录/登录,他将被重定向到KnockoutJS页面。

现在让我们只是说我有一个网址,

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

如果我与我的一个朋友是URL,它显然重定向我的朋友到登录页面。现在,登录页面URL(在那里他将被重定向到)是

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

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

http://example.com/mypage# 

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

路线页面如下,

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

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

而且我AuthControllerredirectTo URL集

protected $redirectTo = '/mypage'; 

什么变化,我应该做的(在AuthController,或路线?或在MiddleWare中)将用户重定向到

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

登录后?

+0

请寻求'Redirect :: intended()'(在laravel文档中),欢呼声。重定向器上的预期方法会将用户重定向到它们在被认证过滤器捕获之前尝试访问的URL。如果预期的目的地不可用,则可以为此方法提供回退URI。 – Kyslik

+0

@Kyslik它不会将我重定向到该页面......当我登录时,它使我访问'http:// example.com/mypage#'。 laravel是否考虑了在该方法的url中**#**之后给出的参数? – prateekkathal

回答

0

由于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); 
} 

希望这可以帮助别人....

谢谢,:)

0

您可以在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

+0

它不会将我重定向到该页面......当我登录时,它使我访问'http:// example.com/mypage#'。 laravel是否考虑了在该方法的url中**#**之后给出的参数? – prateekkathal

+0

是的,它会考虑。我已经测试过自己,它工作得很好。 –

+0

我试着在没有KnockoutJS的页面上做同样的事情,这也不起作用... – prateekkathal