Php 如何在Laravel 5中禁用自动登录?
我对Laravel是新手,但我爱上了这个框架,并决定在我的项目中使用它 我有一个字段Php 如何在Laravel 5中禁用自动登录?,php,laravel-5,Php,Laravel 5,我对Laravel是新手,但我爱上了这个框架,并决定在我的项目中使用它 我有一个字段处于活动状态,默认情况下我将其设置为0。在trunt()方法中,我将$credentials['active']=1。当我注销并再次登录时,效果很好 但当我注册一个用户时,它会自动让用户登录,而无需检查活动字段 我假设您正在控制器中使用AuthenticatesAndRegistersUsers特性 注册由该trait中的postrester()方法进行,该方法在创建新用户后调用login()方法 只有当活动字段
处于活动状态
,默认情况下我将其设置为0
。在trunt()
方法中,我将$credentials['active']=1
。当我注销并再次登录时,效果很好
但当我注册一个用户时,它会自动让用户登录,而无需检查活动字段 我假设您正在控制器中使用
AuthenticatesAndRegistersUsers
特性
注册由该trait中的postrester()
方法进行,该方法在创建新用户后调用login()
方法
只有当活动
字段为true
时,才能在控制器中重写此方法并调用login()
方法。因此,您的postRegister()
方法类似于:
public function postRegister(Request $request)
{
$validator = $this->registrar->validator($request->all());
if ($validator->fails())
{
$this->throwValidationException(
$request, $validator
);
}
$user = $this->registrar->create($request->all());
if ($request->get('active')) {
$this->auth->login($user);
}
return redirect($this->redirectPath());
}
在registersUsers.php中,替换以下行:
Auth::guard($this->getGuard())->login($this->create($request->all()));
以下是:
$this->create($request->all());
这对我很有效,我使用Laravel 5.2我会避免将
活动
字段添加到凭证中-这是一个授权问题,而不是身份验证问题
为此,我将使用中间件来检查登录用户是活动的还是非活动的。
在5.3中,中间件如下所示:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfInactive
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ( $user = Auth::guard('web')->user() ) {
if ( ! $user->active )
return redirect(route('account_inactive'));
}
return $next($request);
}
}
最后我们用它来保护我们的所有路线:
Route::get('inactive', ['as' => 'account_inactive', function () {
return view('inactive');
}]);
Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => 'inactive'], function () {
Route::get('/', ['as' => 'admin.home', 'uses' => 'AdminController@index']);
});
当然,这种方法的优点是,我们可以显示一条比一般的“这些凭据与我们的记录不匹配”更相关的错误消息,而这些消息是具有错误身份验证详细信息的人得到的。所以用户会知道他们不能登录不是他们的错
无论如何,使用已接受答案中的方法,确保用户成功重置密码时,您也执行了相同的操作,因为他们也会自动登录。覆盖核心文件不是一个好主意。您可以在
Auth\RegisterController
中重写该方法,这样,如果有更新,它就不会删除您自定义的内容。
Route::get('inactive', ['as' => 'account_inactive', function () {
return view('inactive');
}]);
Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => 'inactive'], function () {
Route::get('/', ['as' => 'admin.home', 'uses' => 'AdminController@index']);
});