Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用event.preventDefault时无法从Laravel应用程序注销。可供替代的_Javascript_Php_Jquery_Forms_Laravel - Fatal编程技术网

Javascript 使用event.preventDefault时无法从Laravel应用程序注销。可供替代的

Javascript 使用event.preventDefault时无法从Laravel应用程序注销。可供替代的,javascript,php,jquery,forms,laravel,Javascript,Php,Jquery,Forms,Laravel,因此,我在申请表中添加了两个表单,如下所示: <div class="dropdown-menu" aria-labelledby="dropdownMenuButton"> {!! Form::open(['action'=>['AdminController@update',$upload->id,0], 'method'=>'POST']) !!} {{Form::hidden('_method','PUT')}} <a clas

因此,我在申请表中添加了两个表单,如下所示:

<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
    {!! Form::open(['action'=>['AdminController@update',$upload->id,0], 'method'=>'POST']) !!}
    {{Form::hidden('_method','PUT')}}
    <a class="dropdown-item" href="/manage">Approve</a>
    {!! Form::close()!!}

    {!! Form::open(['action'=>['AdminController@update',$upload->id,1], 'method'=>'POST']) !!}
    {{Form::hidden('_method','PUT')}}
    <a class="dropdown-item" href="/manage">Reject</a>
    {!! Form::close()!!}

</div>
我注意到,当这段代码没有被注释掉时,我无法从我的Laravel应用程序中注销。注销根本不起作用

我使用的是标准的Laravel身份验证

这是我如何注销的一部分:

<a class="dropdown-item" href="#" onclick="window.location='{{ route('logout') }}'">Log out</a>

首先,有人能解释为什么会发生这种情况吗?我试着去调查,但我读到的没有多大意义,因为我对这一切都是新手


这里的解决办法是什么?如果没有
preventdefault
方法,我如何发送这些表单?或者在使用时如何注销?我不希望更改我的注销功能。

因此,要注销用户,您需要点击
路由(“注销”)
,这是在您创建laravel auth系统时预定义的路由

注销路由在
/src/illighte/Routing/Router.php
第1125行中定义。它需要是post请求才能注销用户,除laravel csrf令牌外,没有需要发送的参数,该令牌用于确保请求来自应用程序本身,而不是任何外部脚本

如果您转到隐藏在
LoginController
下的注销函数,您将看到一个trait(只是为了保持类更干净)
authenticateUser
trait,它负责注销用户

authenticateUser
trait中,您将在第151行找到一个方法:

public function logout(Request $request)
{
    $this->guard()->logout();

    $request->session()->invalidate();

    return redirect('/');
}
简单来说,它会将用户从会话保护中注销(保护定义了如何对每个请求对用户进行身份验证),然后销毁会话,并通过重拨将用户注销到主页

现在,如前所述,我们需要一个带有csrf令牌的post请求来注销用户:

    <a href="{{ route('logout') }}"
      onclick="event.preventDefault();       

       document.getElementById('logout-form').submit();">
       Logout
   </a>
a href
标记包含
event.preventDefault()
,简单地说就是阻止a href标记正常工作。也就是说,
a href
标记不会重定向到路由,而是我们有
document.getElementById('logout-form').submit();“>
它只需获取表单
注销表单
,并在用户单击该
a href标签时提交该表单

或者简单地更改注销表单的“dropdown item”类名,因为当两个表单都处于活动状态时,该类名将被冻结

    <a href="{{ route('logout') }}"
      onclick="event.preventDefault();       

       document.getElementById('logout-form').submit();">
       Logout
   </a>
 <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
     {{ csrf_field() }}
 </form>