我需要一些帮助,我创建了一个字段" activation_key",在注册后分配给每个用户。如果用户尝试登录,如果他已激活(激活密钥=空)或不显示(显示错误消息),如何立即检查。此检查过程应在laravel postLogin()运行之前完成。我想我以前必须使用中间件,但不知道逻辑本身,如何判断laravel是否是" true"或"假"。总而言之,我不确定,如何完成这件事......
namespace App\Http\Middleware;
use Closure;
class BeforeMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::user()->activation_key) {
// then redirect home cause they're not activated
//return redirect('home');
//not active ;()
dd("not active seems ugly :I");
}
dd("you're active yay");
}
}
路线:
// Authentication routes...
Route::get('auth/login', '***');
Route::post('auth/login', 'Auth\AuthController@postLogin');
Route::get('auth/logout', 'Auth\AuthController@getLogout');
一切顺利;
答案 0 :(得分:1)
你走在正确的轨道上。
public function handle($request, Closure $next)
{
// if they have a key...
if (Auth::user()->activation_key) {
// then redirect home cause they're not activated
return redirect('home');
}
return $next($request);
}
上述作品,但这部分内容不佳:!Auth::user()->activation_key
您可以将其抽象为用户模型上的方法:
public function isNotActivated()
{
return $this->activation_key ? true : false;
}
然后您的中间件可以阅读:
public function handle($request, Closure $next)
{
// // if they have a key...
if (Auth::user()->isNotActivated()) {
return redirect('home');
}
return $next($request);
}
编辑:
要为每个请求注册中间件,请在$middleware
kernal.php
数组
protected $middleware = [
\App\Http\Middleware\Activation::class,
];
或您应用中的特定路线:
protected $routeMiddleware = [
// ...
'activation' => \App\Http\Middleware\Activation::class,
];
然后在routes.php
中引用该中间件:
Route::get('users/profile', ['middleware' => 'activation', function () {
//
}]);
请参阅:http://laravel.com/docs/master/middleware#registering-middleware
答案 1 :(得分:0)
Auth :: user将在身份验证完成之前返回null,并且我不想让用户只能登录才能使用Auth :: user。所以,我为dtj的回答做了以下修改。
这是我的中间件
public function handle($request, Closure $next)
{
if(User::isNotActivated($request->email)) {
return redirect('home');
}
return $next($request);
}
这是我的UserRepository
public static function isNotActivated($email)
{
$user = User::findUserByLogin($email);
return $user->activated ? false : true;
}
而且,这是我的用户模型
public static function findUserByLogin($email)
{
return static::where('email', $email)->first();
}
这样,我使用通过帖子传递的电子邮件,在数据库中找到它,检查激活的列,并返回结果。