Laravel 5.1:Auth::logout() 不起作用,Target [IlluminateContract


Laravel 5.1: Auth::logout() is not working and Target [IlluminateContractsAuthRegistrar] is not instantiable error

我是laravel的新手,我尝试构建一个简单的身份验证。 所有事情都工作正常,除了使用 AuthController 的操作注销时,它根本不起作用。我有一个导航栏,用于检查 Auth::check(),并且在调用注销操作后它不会更改,并且它存储在主页中。但是在进行一些更改(例如删除此手动注销代码)后:

public function logout()
    {
        Auth::logout();
        Session::flush();
        return redirect()->intended('login');
    }

并从中更改路由:

Route::get('logout', 'SessionsController@logout');

对此:

Route::get('auth/logout', 'Auth'AuthController@logout');

它会抛出此错误:

BindingResolutionException in Container.php line 749: Target [Illuminate'Contracts'Auth'Registrar] is not instantiable. 

我在路线中有这条路线.php文件:

Route::get('auth/logout', 'Auth'AuthController@logout');

我的身份验证控制器是Laravel提供给我们的控制器。

我的会话控制器在更改之前处理注销但实际上也不起作用是:

<?php namespace App'Http'Controllers;
use Illuminate'Support'Facades'Auth;
use Illuminate'Http'Request;
use App'Http'Controllers'Controller;
class SessionsController extends Controller
{
    /**
     * Create a new sessions controller instance.
     */
    public function __construct()
    {
        $this->middleware('guest');
    }
    /**
     * Show the login page.
     *
     * @return 'Response
     */
    public function login()
    {
        return view('auth.login');
    }
    /**
     * Perform the login.
     *
     * @param  Request  $request
     * @return 'Redirect
     */
    public function postLogin(Request $request)
    {
        $this->validate($request, ['username' => 'required|exists:users', 'password' => 'required']);
        if ($this->signIn($request)) {
            flash('Welcome back!');
            return redirect()->intended('dashboard');
        }
        flash('Could not sign you in.');
        return redirect()->back();
    }
    /**
     * Destroy the user's current session.
     *
     * @return 'Redirect
     */
    public function logout()
    {
        Auth::logout();
        Session::flush();
        return redirect()->intended('login');
    }
    /**
     * Attempt to sign in the user.
     *
     * @param  Request $request
     * @return boolean
     */
    protected function signIn(Request $request)
    {
        return Auth::attempt($this->getCredentials($request), $request->has('remember'));
    }
    /**
     * Get the login credentials and requirements.
     *
     * @param  Request $request
     * @return array
     */
    protected function getCredentials(Request $request)
    {
        return [
            'username' => $request->input('username'),
            'password' => $request->input('password'),
            'verified' => true
        ];
    }

}

这是身份验证控制器__construct方法:

public function __construct(Guard $auth, Registrar $registrar)
    {
        $this->auth = $auth;
        $this->registrar = $registrar;
        $this->middleware('guest', ['except' => ['logout', 'getLogout']]);
    }

请尽快帮助我。任何帮助将不胜感激。

通过

这个更新你的路线,这是AuthController Trait中存在的默认注销方法

Route::get('auth/logout', 'Auth'AuthController@getLogout');

在您的身份验证控制器中添加此行,这将在注销完成后重定向您的应用程序。

注意:您可以根据需要更改路径。

class AuthController extends Controller
{
   protected $redirectAfterLogout  =   '/auth/login'; // this line

试试这个

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

我终于找到了问题并使用以下解决方案修复了它:

我将路由更改为:

Route::get('auth/logout', 'Auth'AuthController@getLogout');

并将身份验证控制器中的__construct方法更改为:

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

1.问题出在溃败上。我没有调用方法"getlogout",而是在我的路由中调用"logout"方法.php .
2. 在"除了"=> ["注销","获取注销"]中,无论您在路由中调用什么方法.php除了在身份验证控制器__construct方法之外,您都必须添加到此方法中。