我有一个laravel项目,在那里我尝试实现检查用户帐户是否通过用户电子邮件中的激活码确认:
public function SignIn(Request $request){
if(Auth::attempt(['email' => $request['email'], 'password' => $request['password']])) {
if(Auth::user()->status==false){
Auth::logout();
Session::flash('activationError','First please active your account');
return back();
}
return redirect()->route('showDashboardWelcome');
}
else{
Session::flash('loginError','Your username and password are wrong');
return back();
}
}
在上面的代码中,有一个从控制器到登录用户的功能。此功能检查用户电子邮件和密码是否正确,以及用户是否通过电子邮件代码确认了帐户(来自具有两个布尔值的用户模型的$ status变量)。
如果用户未确认帐户,我必须从帐户注销用户,因为功能尝试同时启动用户的会话。有没有办法在不启动用户会话然后注销用户的情况下执行此操作?
我将不胜感激。最好的问候
答案 0 :(得分:1)
添加中间件以直接查询users表并检查状态字段。如果未经验证,则会重定向到显示该消息的页面。例如:
<?php
namespace App\Http\Middleware;
use Closure;
class CheckVerified
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$user = User::where('email', $request->email)->first();
if (!user->status) {
return redirect()->back()->with('not verified');
}
return $next($request);
}
}
答案 1 :(得分:0)
您可以根据需要将任意数量的参数传递给attempt([])
。所以在这里你可以像这样添加'status'到数组
if(Auth::attempt([
'email' => $request['email'],
'password' => $request['password'],
'status' => true
])) {
}
必须满足传递给该数组的每个参数才能使Auth::attemp()
启动会话。