Laravel 5.1:Auth :: logout()无效,目标[Illuminate \ Contracts \ Auth \ Registrar]不可实例化错误

时间:2016-04-26 22:50:07

标签: php authentication laravel-5 laravel-5.1 logout

我是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. 

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

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

我的AuthController是laravel为我们提供的控制器。

我的SessionsController在更改之前处理注销但实际上不起作用是:

<?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
        ];
    }


}

这是AuthController __construct方法:

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

    }

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

3 个答案:

答案 0 :(得分:0)

按此更新您的路线,这是AuthController Trait

中的默认退出方法
Route::get('auth/logout', 'Auth\AuthController@getLogout');

在AuthController中添加此行,这将在Logout完成后重定向您的应用程序。

注意:您可以根据自己的要求更改路径。

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

答案 1 :(得分:0)

试试这个

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

答案 2 :(得分:0)

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

我将溃败更改为:

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

并将AuthController中的__construct方法更改为:

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

1.问题在于溃败。而不是调用方法&#34; getlogout&#34;我呼吁&#34;退出&#34;我的routs.php中的方法。
2.除了&#39; =&GT; [&#39;注销&#39;,&#39; getLogout&#39;],你在routs.php中调用的方法必须添加到此,除非在AuthController __construct方法中。