Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.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
Php Laravel 5身份验证注销不工作_Php_Laravel - Fatal编程技术网

Php Laravel 5身份验证注销不工作

Php Laravel 5身份验证注销不工作,php,laravel,Php,Laravel,当我使用内置身份验证并尝试在/auth/logout处注销用户时,它无法按预期工作。它似乎使用户保持登录状态。但是当我清除浏览器缓存时,我可以看到它实际上已经注销了用户 我没有在页面上看到任何错误,也没有在日志文件中看到任何错误 我猜注销方法中的Session::flush()可能会解决这个问题,但我不知道该放在哪里。。有人能给我指出正确的方向吗?要使用内置身份验证工具使用Laravel注销用户,只需使用Auth::logout()即可 如果会话行为不可预测,请检查config/session.

当我使用内置身份验证并尝试在
/auth/logout
处注销用户时,它无法按预期工作。它似乎使用户保持登录状态。但是当我清除浏览器缓存时,我可以看到它实际上已经注销了用户

我没有在页面上看到任何错误,也没有在日志文件中看到任何错误


我猜注销方法中的
Session::flush()
可能会解决这个问题,但我不知道该放在哪里。。有人能给我指出正确的方向吗?

要使用内置身份验证工具使用Laravel注销用户,只需使用
Auth::logout()即可

如果会话行为不可预测,请检查
config/session.php
中的各种会话设置。

试试这个

输入以下代码“类AuthController扩展控制器”


在崩溃()后恢复选项卡的浏览器上不够。另外,在重定向之后,将创建一个新会话。解决方案:如上所述,在AuthController中的getLogout中,设置一个变量并将其传递给redirect:

$data['logout'] = true;
return redirect('/')->with('data',$data);
在主视图中执行以下操作:

@if(session()->has('data') && session('data')['logout'])
{{session_unset()}}    
{{setcookie('laravel_session', "", -1, "/")}}
@endif

我相信Laravel重定向会重新初始化会话。所以在重定向之后,在视图中,重置删除cookie。谁能对此发表评论?这是正确的原因吗?

我对更新的laravel 5.2也有同样的问题。我使用了laravel的auth控制器,我用like解决了这个问题


/logout
而不是
/auth/logout
同样适用于
/register
/login
中,而不是使用
/auth/register
/auth/login

来解决任何使用公认解决方案有问题的人:我从Laravel 5.1开始,更新到5.2。以下修复对我有效:

尝试将“注销”路径更改为

Route::get('auth/logout', 'Auth\AuthController@logout');
或在AuthController构造函数中添加

public function __construct()
{
    $this->middleware('guest', ['except' => ['logout', 'getLogout']]);
}
摘自:(如果你事后仍有问题,请检查其他答案)

我也有同样的问题。 问题实际上是路由和控制器配置中的一个简单的小错误

您可以看到路由实际上指定了
getLogout
的方法,控制器异常正在查找
logout

您只需要更改控制器中的异常。不需要任何额外的方法。
getLogout
方法已经存在并且工作正常

这是实际的代码

app/Http/routes.php app/Http/Controllers/Auth/AuthController.php
\u构造方法应如下所示:

public function __construct()
{
    $this->middleware($this->guestMiddleware(), ['except' => 'getLogout']);
}

解决方案非常简单

在Http->Middleware->Authenticate.php中,将else语句中的“login”更改为“/”

return redirect()->guest('/')

并在routes.php中定义以下路由

Route::get('/', function () {
    return view('login');
});
要注销,请调用以下函数: 公共函数getlogout(){ \Auth::logout(); 返回重定向('/home'); } 这很重要重定向到“/home”而不是“/”首先调用$this->middleware('auth');
然后在中间件中重定向到“/”

Laravel 5.2,url有点不同

用这个

php artisan make:auth
这将为auth生成路由,并为login e register生成一些模板


在现有项目中使用时要小心,它可能会对代码进行更改,因为每个路由都会调用中间件。您可以在App\Http\Middleware\RedirectIfAuthenticated.php中向“注销路由”添加异常

class RedirectIfAuthenticated
{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @param  string|null  $guard
 * @return mixed
 */
    public function handle($request, Closure $next, $guard = null)
    {
        if (!$request->is('/logout') && Auth::guard($guard)->check()) {
            return redirect('/home');
        }

        return $next($request);
    }
}

升级到Laravel 5.3后,我也遇到了同样的问题。为了解决这个问题,我注意到

App\Http\Controllers\Auth\AuthController

都过时了,所以我换了线

使用AuthenticatesAndRegistersUsers、throttlesLogin

进入

使用AuthenticatesUsers

以及构造函数中的行

$this->中间件($this->guestMiddleware(),['except'=>'logout'])

进入

$this->中间件('guest',['except'=>['logout','getLogout']])


然后方法
App\Http\Controllers\Auth\AuthController@logout
开始正常工作。

这是一个非常老的线程,但最后我发现了一个简单的技巧,可以让用户从服务器注销:

return Auth::logout();

在5.4中,这对我很有效

<a href="#" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">Logout</a>

<form id="logout-form" action="/logout" method="POST" style="display: none;">{{ csrf_field() }}</form>

{{csrf_field()}}

在laravel 5.6及更高版本中注销:

在查看页面中使用:

    <a href="{{ url('logout') }}">Logout</a>

如果没有任何解决方案,请尝试此方法 对于多个自定义防护,如果使用
auth()->注销
,则它将不起作用
只需使用
auth('your-guard-name')->logout()然后它就可以正常工作。

我需要更改会话::flush();to\Session::flush();但在其他方面对我的情况有效。@UmairHamid将该代码(使用
Auth::Logout()
而不是
$this->Auth->Logout();
)放入AuthController中的一个新函数(例如,
public function Logout()
)中,并将您的Auth/Logout路径指向那里。尝试了相同的结果,但在这里也没有运气;但是@lorey的建议对我有效。谢谢,在其他许多失败的解决方案之后,你的第二个选择立即起了作用!这一个对我有用,我用的是5.2,非常感谢你。这应该是公认的答案。更改默认的
$this->middleware('guest',['except'=>['getLogout']])
$this->中间件('guest',['except'=>['logout','getLogout']])
成功了。我刚刚将路径
…@getLogout
更改为
…@logout
,现在一切都正常了。thanksWorth提到:请注意,您的注销路由不是已经实现
guest
中间件的路由组的一部分。在这种情况下,它将忽略上述异常。这是有效的。考虑到
getLogout
是在
illighted/Foundation/Auth/authenticates和registersusers
中调用的方法,您必须这样做似乎很奇怪,所以他们应该有

return Auth::logout();
<a href="#" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">Logout</a>

<form id="logout-form" action="/logout" method="POST" style="display: none;">{{ csrf_field() }}</form>
    <a href="{{ url('logout') }}">Logout</a>
Route::get('logout', 'Auth\LoginController@logout');