如果没有登录,我不允许用户提交表单。因此,请提醒登录。
Jquery和Ajax
$(document).on('submit', '.bet', function (e)
{
e.preventDefault();
var frm = $(this);
$.ajax({
type: frm.attr('method'),
url: frm.attr('action'),
data: frm.serialize(),
dataType: 'json',
success: function (data)
{
if(data == 'notloggedin')
{
alert('You must login first!');
}
else if(data==true)
{
swal('Bet Success! The details has been sent to your email!');
}
else if(data=='dateexpired')
{
swal('The match bet time expired!');
}
}
});
});
控制器:
public function store(Request $request)
{
if($request->ajax())
{
if(!Auth::check())
{
echo json_encode('notloggedin');die;
}
....
这一切都很好。但是,如果我将此路由置于auth中间件之下,则警报不会出现。在开发人员的工具中,我看到unauthorized action
。是。很明显,但我仍然想要出现警报。
Route::group(['middleware' => ['auth']], function () {
Route::post('/bet/store','BetController@store');
});
答案 0 :(得分:1)
这是因为从中间件返回请求(401)并且从不执行控制器操作。中间件也是这个检查的正确位置为什么你不从auth中间件返回未经授权的响应?像这样的东西
应用\ HTTP \中间件\验证强>
public function handle($request, Closure $next)
{
if ($this->auth->guest()) {
if ($request->ajax()) {
return response()->json(['notloggedin']);
}
return redirect()->guest('login')->withErrors(['You must login first.']);
}
return $next($request);
}
请注意,这将返回ajax请求的状态200,但我发现您正在使用success
功能,因此它可以正常工作。您还可以使用
if ($request->ajax()) {
return response('Unauthorized.', 401);
}
并在jQuery上使用error
方法
答案 1 :(得分:1)
错误未显示,因为如果auth中间件失败,则响应表明请求未成功(因此不会执行成功方法)。在这种情况下,您必须使用.fail()方法。
var jqXHR = $.ajax({
type: frm.attr('method'),
url: frm.attr('action'),
data: frm.serialize(),
dataType: 'json',
success: function (data)
{
if(data == 'notloggedin')
{
alert('You must login first!');
}
else if(data==true)
{
swal('Bet Success! The details has been sent to your email!');
}
else if(data=='dateexpired')
{
swal('The match bet time expired!');
}
}
});
jqXHR.fail(function( jqXHR, textStatus, errorThrown ) {
if(jqXHR.status == 401) {
alert('unauthorized');
}
});