Laravel 5.1: Auth::logout() 不工作并且目标 [Illuminate\Contracts\Auth\Registrar] 不是可实例化错误
Laravel 5.1: Auth::logout() is not working and Target [Illuminate\Contracts\Auth\Registrar] 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.
我在 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']]);
}
请尽快帮助我。任何帮助,将不胜感激。
用这个更新你的路线,这是 AuthController
Trait
中存在的默认注销方法
Route::get('auth/logout', 'Auth\AuthController@getLogout');
在您的 AuthController 中添加这一行,这将在注销完成后重定向您的应用程序。
注意:您可以根据需要更改路径。
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');
并将 AuthController 中的 __construct 方法更改为:
public function __construct()
{
$this->middleware('guest', ['except' => ['logout', 'getLogout']]);
}
1.The问题出在溃败中。我没有调用方法 "getlogout",而是在我的 routs.php 中调用了 "logout" 方法。
2. 在 'except' => ['logout', 'getLogout'] 中,你在 routs.php 中调用的任何方法都必须添加到此中,但在 AuthController __construct 方法中除外.
我是 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']]);
}
请尽快帮助我。任何帮助,将不胜感激。
用这个更新你的路线,这是 AuthController
Trait
Route::get('auth/logout', 'Auth\AuthController@getLogout');
在您的 AuthController 中添加这一行,这将在注销完成后重定向您的应用程序。
注意:您可以根据需要更改路径。
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');
并将 AuthController 中的 __construct 方法更改为:
public function __construct()
{
$this->middleware('guest', ['except' => ['logout', 'getLogout']]);
}
1.The问题出在溃败中。我没有调用方法 "getlogout",而是在我的 routs.php 中调用了 "logout" 方法。
2. 在 'except' => ['logout', 'getLogout'] 中,你在 routs.php 中调用的任何方法都必须添加到此中,但在 AuthController __construct 方法中除外.