我使用常见的httpRequest登录,因此我可以使用Redirect::intended();
将用户引导至网址,然后再将其引导至登录页面。这一切都运作良好。
现在我已经更改登录到ajax请求我现在只能在javascript中重定向url。所以我要将预期的网址传递到前端,然后执行window.location=url
问题是我无法获得intended/origina
我的网址。任何一种laravel专家可以帮助我吗?
答案 0 :(得分:12)
在您的控制器操作中使用:
$url = Redirect::intended( ... )->getTargetUrl();
(其中...
是后备网址)
然后在JSON响应中返回它,并使用window.location
或其他来进行重定向。
答案 1 :(得分:10)
当您显示表单时,如果可用,您可以从url
抓取目标session
并将其传递给视图,然后使用window.location
重定向。
因此。如何抓住intended url
?
$intended_url = Session::get('url.intended', url('/'));
Session::forget('url.intended');
此处,intended url
中的第一个参数为session
,并且使用url('/')
辅助方法将默认值设置为主页,因此$intended_url
将始终包含{{0}} {1}},意图或违约。然后在加载视图时,使用以下代码传递url
:
$intended_url
然后从视图中使用它:
return View::make('login')->with('intended_url', $intended_url);
或者,您可以设置View Composer,因此每当显示window.location = $intended_url;
视图/表单时,该视图中都会显示login
,您可以使用此功能执行此操作:
intended url
此处,View::composer('login', function($view){
$intended_url = Session::get('url.intended', url('/'));
Session::forget('url.intended');
return $view->with('intended_url', $intended_url);
});
是登录页面的视图名称,如果您的情况属实,则将其更改为login
视图的相应名称。您可以将此代码保存在'global.php'文件中的login
文件夹中,或将其保存在单独的文件中,并使用此文件(最后)将此文件包含在app/start
文件中:
global.php
假设文件名为require 'view_composer.php';
,存在于view_composer.php
文件夹中。
答案 2 :(得分:1)
在Laravel 5.7中:
$url = redirect()->intended()->getTargetUrl();
答案 3 :(得分:0)
我正在将以下方法与用于Laravel 5.7的自定义登录控制器和中间件一起使用,但是我希望该方法可在laravel 5的任何版本中使用
内部中间件
if (Auth::check()){
return $next($request);
}
else{
return redirect()->guest(route('login'));
}
如果您没有将目标网址传递给客户端,请使用以下内部控制器登录方法
if (Auth::attempt(['email' => $email, 'password' => $password])) {
return redirect()->intended('/default');
}
如果您需要将目标网址传递给客户端,则可以尝试以下
if (Auth::attempt(['username' => $request->username, 'password' => $request->password])) {
$intended_url= redirect()->intended('/default')->getTargetUrl();
$response = array(
'status' => 'success',
'redirectUrl' => $intended_url,
'message' => 'Login successful.you will be redirected to home..', );
return response()->json($response);
} else {
$response = array(
'status' => 'failed',
'message' => 'username or password is incorrect', );
return response()->json($response);
}
从客户端重定向到目标网址
success: function (data) {
if(data.redirectUrl){
window.location.href = data.redirectUrl;
}
},