代码之家  ›  专栏  ›  技术社区  ›  charlie

laravel 5.5 ajax注销无重定向

  •  1
  • charlie  · 技术社区  · 7 年前

    我正在尝试在blade视图中创建一个注销按钮,它可以在不重定向用户的情况下注销用户。我只想重新加载同一页。

    我认为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 回复  |  直到 7 年前
        1
  •  1
  •   charlie    7 年前

    我的请求不是由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('/');
        }
    }