php - Laravel 邮箱验证链接问题
问题描述
在我的 laravel 应用程序的应用程序 url 中是这样的,admin.site
我正在从管理面板将用户注册到我的应用程序。
我的客户门户网址是customer.site
.
一旦管理员从管理面板 (admin.site) 中创建用户,客户就会收到一封帐户验证电子邮件。但问题是现在我需要这个验证链接
customer.site/email/...
但是当前的链接是这样的
admin.site/email/...
那么如何将此验证链接更改为customer.site
以下是我的客户控制器商店功能
public function store(Request $request)
{
request()->validate([
'name' => ['required', 'alpha','min:2', 'max:255'],
'last_name' => ['required', 'alpha','min:2', 'max:255'],
'email' => ['required','email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:12', 'confirmed','regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{12,}$/'],
'mobile'=>['required', 'regex:/^\+[0-9]?()[0-9](\s|\S)(\d[0-9]{8})$/','numeric','min:9'],
'username'=>['required', 'string', 'min:4', 'max:10', 'unique:users'],
'roles'=>['required'],
'user_roles'=>['required'],
]);
//Customer::create($request->all());
$input = $request->all();
$input['password'] = Hash::make($input['password']);
$user = User::create($input);
$user->assignRole($request->input('roles'));
event(new Registered($user));
return redirect()->route('customers.index')
->with('success','Customer created successfully. Verification email has been sent to user email. ');
}
我正在发送我的验证电子邮件
event(new Registered($user));
由于客户无权访问管理站点,因此它给了我 403 错误消息。
解决方案
对于可能发送大量电子邮件的应用程序,使用电子邮件通知很有用。可以通过执行以下命令来创建通知:
php artisan make:notification SendRegisterEmailNotifcation
此命令将创建一个SendRegisterEmailNotifcation文件,可以通过导航到app/Notifications/SendRegisterEmailNotifcation.php路径找到该文件。当您完成此操作并自定义消息、操作和其他可能的事情时,您的商店功能将如下所示。我已删除验证并将其放入请求中。如果您对它的工作原理感兴趣,可以在下面找到一个示例。
更多关于通知的信息可以在这里找到:https ://www.cloudways.com/blog/laravel-notification-system-on-slack-and-email/
// CustomerController
public function store(StoreCustomerRequest $request)
{
// Get input from the request and hash the password
$input = $request->all();
$input['password'] = Hash::make($input['password']);
// Create user and assign role
$user = User::create($input);
$user->assignRole($request->input('roles'));
// Send Register Email
$user->notify(new SendRegisterEmailNotifcation);
return redirect()->route('customers.index')
->with('success','Customer created successfully. Verification email has been sent to user email. ');
}
我建议创建验证数据的请求。这样控制器将保持清洁,您实际上可以验证 laravel 想要的数据。//StoreCustomerRequest
class StoreCustomerRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::check();
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
// @todo Add validation rules
return [
'name' => 'required|string|max:255',
'last_name' => 'required|alpha|min:2|max:255'
'email' => 'required|string|email|max:255|unique:users',
];
}
}
将通知添加到您的客户模型。必须这样做才能发送通知。
// Customer model
class Customer {
use Notifiable;
}
推荐阅读
- macos - 让 MainPage.cs 在 Visual Studio 的 Xamarin 中创建
- java - 为什么没有像 MediaType.APPLICATION_XML_UTF8 这样的 Spring MediaType?
- elm - Elm 函数可以有文档字符串吗?
- scala - 从坐标 41.7523,12.8629 设置地理围栏
- ios - 如何将视图添加到 UIWindow 以便将现有视图控制器向上推
- amazon-web-services - Docker 容器运行错误
- sql - 如何将数据从 Oracle 故障转储文件加载到 Oracle 数据库?
- laravel-5.4 - 如何在laravel中获取插入的行ID?
- javascript - 计算具有特定字符串的数据表行
- oracle - 如何在 HQL/Grails 中将月-年转换为日期?