#php #laravel
#php #laravel
Вопрос:
Я пытаюсь реализовать проверку электронной почты Laravel по умолчанию, но всякий раз, когда я переключаюсь column name
users table
с email
Laravel на user_email
Laravel, перестаю отправлять электронное письмо с подтверждением.
Я также переопределяю метод по умолчанию getEmailForVerification()
, найденный в MyVerifyEmail.php
файле в моей пользовательской модели, который возвращается user_email
правильно.
Моя пользовательская модель:
<?php
namespace AppModels;
use IlluminateContractsAuthMustVerifyEmail;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateNotificationsNotifiable;
class User extends Authenticatable implements MustVerifyEmail
{
use HasFactory, Notifiable;
public function getAuthPassword ()
{
return $this->user_password;
}
protected $primaryKey = 'user_id';
protected $fillable = [
'user_name',
'user_email',
'user_password',
'user_phone',
'user_role_id',
];
protected $hidden = [
'password',
'remember_token',
];
protected $casts = ['email_verified_at' => 'datetime',];
public function getEmailForVerification()
{
return $this->user_email;
}
public function role()
{
return $this->belongsTo(Role::class , 'user_role_id');
}
}
Код RegisterController:
public function store(Request $request)
{
$request->validate([
'name'=>'required',
'email'=>'required |email|unique:AppModelsUser,user_email',
'password'=>'required',
'phone'=>'required|unique:AppModelsUser,user_phone|min:10|max:15'
]);
$user = User::create([
'user_name' => $request->name,
'user_email' => $request->email,
'user_password' => Hash::make($request->password),
'user_phone' => $request->fullMobileNumber,
'user_role_id' => '9'
]);
event(new Registered($user));
$query = $user->save();
if($query){
$request->session()->flash('success','Your account has been created successfully');
return redirect()->route('login');
}
else{
return back()-> with('failed','Something went wrong. Please try again');
}
}
public function emailVerificationNotice()
{
return view('auth.verifyEmail');
}
public function emailVerificationVerify(EmailVerificationRequest $request)
{
$request->fulfill();
return redirect()->route('dashboard');
}
Register.blade.php
<form action="{{route('auth.store')}}" method="POST" id="user-registration" data-parsley-validate>
@csrf
<div id="name-wrapper" class="form-group parsley-input">
<label>Full name<span class="tx-danger">*</span></label>
<input type="text" name="name" class="form-control" placeholder="Enter your full name"
data-parsley-class-handler="#name-wrapper" data-parsley-required-message="Please enter your full name"data-parsley-pattern="^[a-zA-Z s] $"
data-parsley-pattern-message="Numbers amp; special characters aren't allowed"required>
<p class="text-danger">@error('name'){{$message}}@enderror</p>
</div>
<div id="email-wrapper" class="form-group parsley-input">
<label>Email address<span class="tx-danger">*</span></label>
<input type="email" name="email" class="form-control" placeholder="Enter your email address"
data-parsley-required-message="Please enter your email address" required autocomplete="off">
<p class="text-danger">@error('email'){{$message}}@enderror</p>
</div>
<div id="password-wrapper" class="form-group parsley-input">
<label>Password<span class="tx-danger">*</span></label>
<input type="password" name="password" class="form-control" placeholder="Enter your password"
data-parsley-required-message="Please enter your password" data-parsley-pattern="^(?=.*d)(?=.*[a-zA-Z]).{8,}$"
data-parsley-pattern-message="Password must be 6-50 chars long, at least one letter amp; one number" required >
<p class="text-danger">@error('password'){{$message}}@enderror</p>
</div>
<div id="phone-wrapper" class="form-group parsley-input">
<label>Mobile number<span class="tx-danger">*</span></label>
<input type="tel" name="phone" id="user-phone" class="form-control" required>
<p id="phone-error-null" class="d-none">Please enter mobile number</p>
<p id="phone-error-msg" class="d-none"></p>
<p class="text-danger">@error('phone'){{$message}}@enderror</p>
</div>
<div class="form-group tx-12">
By clicking <strong>Create an account</strong> below, you agree to our terms of service and privacy statement.
</div><!-- form-group -->
<button type="submit" id="submit-registration" class="btn btn-brand-02 btn-block">Create Account</button>
</form>
.ENV Config
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=c1952edd7b2969
MAIL_PASSWORD=3376437f06507d
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=from@example.com
MAIL_FROM_NAME="${APP_NAME}"
Ответ №1:
на самом деле проблема возникает при переопределении функции getEmailForVerification().
итак, я рекомендовал вам создать файл MustVerifyEmail.php в модели затем скопируйте весь код из IlluminateContractsAuth MustVerifyEmail из этого файла и вставьте в новый файл. затем используйте свой код для нового файла, например
public function getEmailForVerification()
{
return $this->user_email;
}
и не забудьте изменить User.php файл
, подобный замене
используйте IlluminateContractsAuthMustVerifyEmail;
для
используйте App Models MustVerifyEmail;
Комментарии:
1. Я обновил свой код блейд-файла, там все в порядке. Я попытался переименовать свой
input
fromuser_email
, как вы упомянули выше, но все равно ничего не получилось2. @MusharrafKhan <тип ввода =»email» имя =»user_email» > ты сделал?
3. name=»user_email»
4. вы уверены.. когда вы регистрируете свое хранилище данных в БД
5. Я даже
dd(return this->user_email)
getEmailForVerification()
пытаюсь перепроверить, получаю ли я адрес электронной почты пользователя, и да, я его получаю, но я не знаю, почему laravel не отправляет электронное письмо