laravel - 在 Laravel 中注册用户时如何阻止守卫?
问题描述
我正在使用默认的 Laravel 注册,每次注册用户时,系统当前都会让他登录,这是我不想要的。
出于某种原因,我认为我有这个工作,但现在测试我看到了这个问题。下面是我的注册控制器:
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Http\Request;
use Illuminate\Auth\Events\Registered;
use Illuminate\Support\Str;
use Mail;
use App\Mail\verifyEmail;
use Illuminate\Support\Facades\Session;
class RegisterController extends Controller
{
use RegistersUsers;
protected $redirectTo = '/';
public function __construct()
{
$this->middleware('guest');
}
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
}
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'verifytoken' => Str::random(40),
'role_id' => $data['role_id']
]);
$thisUser = User::findOrFail($user->id);
Session::flush('status', 'Please verify your email for account activation');
$this->sendEmail($thisUser);
return $user;
}
public function sendEmail($thisUser){
Mail::to($thisUser['email'])->send(new verifyEmail($thisUser));
}
public function sendEmailDone($email, $verifytoken){
User::where(['email'=>$email, 'verifytoken'=>$verifytoken])->update(['status'=>'1', 'verifytoken'=>NULL]);
return redirect('/login');
}
public function verifyEmail(){
return view('emails.veryEmail');
}
}
用户注册后,将向他发送一封带有令牌的电子邮件,并且只有在他通过电子邮件激活令牌后才允许他登录。
这里唯一的问题是用户当前正在自动登录。
我知道守卫通常会记录用户,但我什至没有。
解决方案
traitRegistersUsers
定义了 register 方法:
/**
* Handle a registration request for the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
$this->guard()->login($user);
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
您需要覆盖它并删除该$this->guard()->login($user);
行。
推荐阅读
- swift - 如何通过 urlsession 更新 uitableview 单元格中的进度视图(下载/上传文件)
- laravel - Azure 中托管的 Laravel Web 应用程序中的 PUT 和 DELETE 405 Method Not Allowed 错误
- javascript - 相对于父容器定位元素
- c++ - 对模板类的模糊引用 (C++)
- javascript - 带有 Redux 表单的 Material UI 自动完成组件
- events - Flink 表源添加时间属性时数据类型不匹配
- azure - 触发的 Web 作业 Powershell 部署脚本
- mysql - 如何根据两个或多个重复的列更新 SQL 行
- android - Android 进度条 setprogress() 函数不起作用
- javascript - Uint8Array 是否在节点和浏览器中使用共享内存缓冲区?