Laravel 5.5 Ajax注销无重定向

时间:2018-07-09 17:52:51

标签: jquery ajax laravel laravel-5.5 logout

我正在尝试在刀片视图内创建一个注销按钮,该按钮可以注销用户而无需重定向用户。我只想重新加载同一页面。

我认为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('/');
    }
}

我想我缺少了一些东西...

1 个答案:

答案 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

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>

LoginController

/**
 * 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('/');
    }
}