Laravel 5.5 Ajax 注销没有重定向
Posted
技术标签:
【中文标题】Laravel 5.5 Ajax 注销没有重定向【英文标题】:Laravel 5.5 Ajax Logout no redirect 【发布时间】:2018-12-17 11:36:13 【问题描述】:我正在尝试在刀片视图中创建一个注销按钮,该按钮可以在不重定向用户的情况下注销用户。我只想重新加载同一页面。
我认为 ajax 是最好的方法,(但我可能错了)。
这是我的按钮:
@if (auth()->check())
<p>Vous êtes identifié en tant que <strong> auth()->user()->name </strong>. <a href="#" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">Se déconnecter ?</a>
<form id="logout-form" action=" url('/logout') " method="POST" style="display: none;">
csrf_field()
</form>
</p>
@endif
这是我的 ajax 函数:
<script>
// Ajax Logout
$('#logout-form').on('submit',function(e)
e.preventDefault(e);
var dest_url = " url('/logout') ";
$.ajax(
type:"POST",
url:dest_url,
data:$(this).serialize(),
dataType: 'json',
headers: 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
success: function(data)
c = "success";
t = "Succès";
m = "Vous avez été déconnecté";
i = "icon-circle-check";
iziToast.show(
class:"iziToast-"+c||"",
title:t||"Sans titre",
message:m||"-",
animateInside:!1,
position:"topRight",
progressBar:!1,
icon:i,
timeout:9000,
transitionIn:"fadeInLeft",
transitionOut:"fadeOut",
transitionInMobile:"fadeIn",
transitionOutMobile:"fadeOut"
);
)
);
</script>
我的路线文件 (web.php)
Auth::routes();
Route::post('logout', '\App\Http\Controllers\Auth\LoginController@logout');
LoginController.php
/**
* Custom logout function with redirect back if ajax.
*
* @return void
*/
public function logout(Request $request)
$this->guard()->logout();
$request->session()->invalidate();
$request->session()->flash('errors', 'Vous êtes déconnecté');
if($request->ajax())
return Response::json(array(
'success' => true,
'data' => 'Vous êtes déconnecté'
));
else
return redirect('/');
我想我错过了什么......
【问题讨论】:
你的dd($request->ajax())
是什么?
我认为您可以在return redirect('/');
中使用return redirect()->back();
在log out
之后返回上一页(不使用Ajax)
【参考方案1】:
我的请求没有被 Ajax 执行,所以我删除了logout-form
表单并监听了链接上的点击事件。
我的 ajax 函数中还有一个语法错误,在 'error:' 部分之前缺少一个 ','。
这是我的完整代码,没有多余的行:
退出按钮
@if (auth()->check())
<p>Vous êtes identifié en tant que <strong> auth()->user()->name </strong>. <a id="logout_btn" href="#">Se déconnecter ?</a>
</p>
@endif
Ajax 函数
<script>
// Ajax Logout
$('#logout_btn').click(function(e)
e.preventDefault();
var dest_url = " url('/logout') ";
$.ajax(
type:"POST",
url:dest_url,
headers: 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
success: function()
c = "success";
t = "Succès";
m = "Vous avez été déconnecté";
i = "icon-circle-check";
iziToast.show(
class:"iziToast-"+c||"",
title:t||"Sans titre",
message:m||"-",
animateInside:!1,
position:"topRight",
progressBar:!1,
icon:i,
timeout:9000,
transitionIn:"fadeInLeft",
transitionOut:"fadeOut",
transitionInMobile:"fadeIn",
transitionOutMobile:"fadeOut"
);
$('form[name="reservation"]').load(document.URL + ' form[name="reservation"]');
$('.toolbar .account').load(document.URL + ' .toolbar .account');
,
error: function()
console.log('Erreur lors de la déconnection via Ajax');
c = "danger";
t = "Erreur";
m = "Une erreur s'est produite lors de la déconnection";
i = "icon-ban";
iziToast.show(
class:"iziToast-"+c||"",
title:t||"Sans titre",
message:m||"-",
animateInside:!1,
position:"topRight",
progressBar:!1,
icon:i,
timeout:9000,
transitionIn:"fadeInLeft",
transitionOut:"fadeOut",
transitionInMobile:"fadeIn",
transitionOutMobile:"fadeOut"
);
)
);
</script>
登录控制器
/**
* Custom logout function with no redirect if ajax.
*
* @return void
*/
public function logout(Request $request)
$this->guard()->logout();
$request->session()->invalidate();
if($request->ajax())
return Response::json(array(
'success' => true,
'data' => 'Vous êtes déconnecté'
));
else
return redirect('/');
【讨论】:
以上是关于Laravel 5.5 Ajax 注销没有重定向的主要内容,如果未能解决你的问题,请参考以下文章