我正在尝试在刀片视图内创建一个注销按钮,该按钮可以注销用户而无需重定向用户。我只想重新加载同一页面。
我认为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('/');
}
}
我想我缺少了一些东西...
答案 0 :(得分:1)
我的请求未由Ajax执行,因此我删除了logout-form
表单,并听了链接上的click事件。
我的ajax函数也有语法错误,在“错误:”部分之前缺少“,”。
这是我完整的代码,没有多余的行:
@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
<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('/');
}
}