Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем привет, я только знакомлюсь с разработкой на Laravel, и столкнулся с такой проблемой, как организовать смену email пользователя из его личного кабинета, только после подтверждения новой почты? Регистрацию с подтверждением Email я сделал, а вот как теперь таким же образом реализовать смену? При этом, если пользователь не подтвердил, то остается олд емэйл. Версия ларавел 5.8, помогите пожалуйста.
Изменено Wim91 (31.01.2021 07:52:46)
Не в сети
Привет! Отлично, что ты начинаешь работать с Laravel. Вот шаги, которые помогут тебе реализовать смену email пользователя с подтверждением новой почты:
Создание маршрута и контроллера:
Создай маршруты для отображения формы изменения email и для обработки подтверждения.
php
// web.php
Route::get('profile/change-email', 'ProfileController@showChangeEmailForm')->name('profile.change-email');
Route::post('profile/change-email', 'ProfileController@sendChangeEmailLink');
Route::get('profile/verify-new-email/{token}', 'ProfileController@verifyNewEmail')->name('profile.verify-new-email');
Форма изменения email:
Создай форму в твоем шаблоне для ввода нового email.
html
<!-- change-email.blade.php -->
<form method="POST" action="{{ route('profile.change-email') }}">
@csrf
<input type="email" name="new_email" required>
<button type="submit">Change Email</button>
</form>
Контроллер:
В контроллере обработай ввод нового email и отправь ссылку для подтверждения.
php
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
class ProfileController extends Controller
{
public function showChangeEmailForm()
{
return view('change-email');
}
public function sendChangeEmailLink(Request $request)
{
$request->validate(['new_email' => 'required|email|unique:users,email']);
$token = Str::random(60);
$user = Auth::user();
$user->new_email = $request->new_email;
$user->email_verification_token = $token;
$user->save();
Mail::send('emails.verify-new-email', ['token' => $token], function ($message) use ($request) {
$message->to($request->new_email);
$message->subject('Verify Your New Email Address');
});
return back()->with('message', 'A verification link has been sent to your new email address.');
}
public function verifyNewEmail($token)
{
$user = User::where('email_verification_token', $token)->firstOrFail();
$user->email = $user->new_email;
$user->new_email = null;
$user->email_verification_token = null;
$user->save();
return redirect()->route('home')->with('message', 'Email address updated successfully.');
}
}
Шаблон письма для подтверждения:
Создай шаблон письма для отправки ссылки подтверждения.
html
<!-- resources/views/emails/verify-new-email.blade.php -->
<a href="{{ route('profile.verify-new-email', $token) }}">Click here to verify your new email address</a>
Миграция для добавления новых полей:
Если у тебя еще нет полей для нового email и токена в таблице пользователей, создай миграцию.
php
Schema::table('users', function (Blueprint $table) {
$table->string('new_email')->nullable();
$table->string('email_verification_token')->nullable();
Не в сети
Страницы 1