laravel 5.4 使用 ajax 登录。身份验证成功,但 redirectTo 属性不起作用并保持重定向到“/home”
Posted
技术标签:
【中文标题】laravel 5.4 使用 ajax 登录。身份验证成功,但 redirectTo 属性不起作用并保持重定向到“/home”【英文标题】:laravel 5.4 login using ajax. Authentication succeeded but redirectTo property not working and keep redirect to '/home' 【发布时间】:2018-02-18 23:11:43 【问题描述】:我正在尝试在 laravel 中使用 ajax 创建自定义登录,因此我认为表单验证错误会显示得更快。我已经成功显示表单验证错误,在凭据为假时显示消息,并在凭据为真时重新加载登录页面。我的问题是当登录页面重新加载时,它仍然将页面重定向到'/home'页面,但是我已经将redirectTo属性设置为'/'。
这是我的登录控制器
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Validator;
class LoginController extends Controller
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
$this->middleware('guest')->except('logout');
public function showLoginForm()
return view('auth.loginjax');
public function username()
return 'username';
public function login(Request $request)
if ($this->hasTooManyLoginAttempts($request))
$this->fireLockoutEvent($request);
return $this->sendLockoutResponse($request);
$validator = Validator::make($request->all(),[
$this->username() => 'required|string',
'password' => 'required|string',
]);
$data = array();
if ($validator->passes())
$data['valid']=true;
if ($this->attemptLogin($request))
// return $this->sendLoginResponse($request);
$data['masuk'] = true;
else
$this->incrementLoginAttempts($request);
// return $this->sendFailedLoginResponse($request);
$data['masuk'] = false;
else
$data['namafield']=array();
$data['texterror']=array();
$data['valid']=false;
if ($validator->errors()->has($this->username()))
$data['namafield'][]=$this->username();
$data['texterror'][]=$validator->errors()->first($this->username());
if ($validator->errors()->has('password'))
$data['namafield'][]='password';
$data['texterror'][]=$validator->errors()->first('password');
return response()->json($data);
当我在没有 ajax 且没有覆盖登录方法的情况下登录时,我的登录控制器工作正常(重定向到“/”页面)。
这是我的ajax方法
function masuk()
loadingSuccess("#alert_login");
$('#btnMasuk').val('Konfirmasi..');
$("#btnMasuk").attr("disabled",true);
$.ajax(
url:" route('masuk') ",
type: "POST",
data: $('#formLogin').serialize(),
dataType:"JSON",
success:function(data)
$("#alert_login").html('');
$("button").attr("disabled",false);
if (data.valid)
if (data.masuk===true)
location.reload()
else
var div = "#alert_login";
var message = "Kombinasi Nama Pengguna dan Kata Sandi Tidak Ditemukan";
$('#username').focus();
alertDanger(div,message);
else
for (var i = data.namafield.length; i >= 0; i--)
$('[name="'+data.namafield[i]+'"]').focus();
$('[name="'+data.namafield[i]+'"]').parent().addClass('has-error'); //select parent twice to select div form-group class and add has-error class
$('[name="'+data.namafield[i]+'"]').next().text(data.texterror[i]);
$('#btnMasuk').val('Masuk');
$("#btnMasuk").attr("disabled",false);
,
error: function (data)
alert(data);
)
如您所见,我使用 location.reload() 重新加载页面。
如果你知道些什么,请告诉我,对不起我的英语不好。
【问题讨论】:
【参考方案1】:这不起作用,因为 LoginController 只是返回登录后应该重定向的页面的 html,如果您看到成功关闭 ajax 的结果,您将看到 html。所以基本上你要做的是当 ajax 请求成功时,即httpStatusCode == 200
然后你必须在 JS 的帮助下手动将用户重定向到你想要的页面。
window.href = '/home';
【讨论】:
是的,我想我会按照你的建议去做。谢谢!以上是关于laravel 5.4 使用 ajax 登录。身份验证成功,但 redirectTo 属性不起作用并保持重定向到“/home”的主要内容,如果未能解决你的问题,请参考以下文章
如果用户未使用中间件进行身份验证,Laravel 5.4 将重定向到特定页面