/** * @param UserSettingsRequest $request * @return \Illuminate\Http\RedirectResponse */ public function save(UserSettingsRequest $request) { $user = auth()->user(); if ($user->email !== $request->get('email')) { $email = $request->get('email'); // kasujemy poprzednie rekordu zwiazane z tym userem Actkey::where('user_id', $user->id)->delete(); // przed zmiana e-maila trzeba wyslac link potwierdzajacy $actkey = Actkey::create(['actkey' => str_random(), 'user_id' => $user->id, 'email' => $email]); // taki format linku zachowany jest ze wzgledu na wsteczna kompatybilnosc. // z czasem mozemy zmienic ten format aby wskazywal na /User/Confirm/Email/<id>/<actkey> $url = route('user.email') . '?id=' . $user->id . '&actkey=' . $actkey->actkey; Mail::queue('emails.email', ['url' => $url], function ($message) use($email) { $message->to($email); $message->subject('Prosimy o potwierdzenie nowego adresu e-mail'); }); if ($user->is_confirm) { $request['email'] = $user->email; } } User::find($user->id)->fill($request->all())->save(); return back()->with('success', 'Zmiany zostały poprawie zapisane'); }
/** * Obsluga formularza rejestracji uzytkownika * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function signup(Request $request) { $this->validate($request, ['name' => 'required|min:2|max:28|username|unique:users', 'email' => 'required|email|max:255|unique:users', 'password' => 'required|confirmed|min:3', 'human' => 'required']); DB::beginTransaction(); try { $email = $request->input('email'); $user = User::create(['name' => $request->input('name'), 'email' => $email, 'password' => bcrypt($request->input('password'))]); $actkey = Actkey::create(['actkey' => str_random(), 'user_id' => $user->id]); // taki format linku zachowany jest ze wzgledu na wsteczna kompatybilnosc. // z czasem mozemy zmienic ten format aby wskazywal na /User/Confirm/Email/<id>/<actkey> $url = route('user.email') . '?id=' . $user->id . '&actkey=' . $actkey->actkey; Mail::queue('emails.signup', ['url' => $url], function ($message) use($email) { $message->to($email); $message->subject('Dziękujemy za rejestrację. Potwierdź autentyczność swojego adresu e-mail'); }); Auth::login($user, true); stream(Stream_Create::class, new Stream_Person()); DB::commit(); } catch (\Exception $e) { DB::rollBack(); throw $e; } return redirect()->intended(route('home')); }
<?php use Coyote\Actkey; $I = new FunctionalTester($scenario); $I->wantTo('confirm my email address'); $userId = 100001; $actkey = 'randomstring'; $I->haveRecord('users', ['id' => $userId, 'name' => 'Joe Doe', 'email' => '*****@*****.**', 'password' => bcrypt('123'), 'created_at' => new DateTime(), 'updated_at' => new DateTime(), 'is_confirm' => 0]); // uzywamy modelu poniewaz w tabeli nie ma klucza "id" Actkey::create(['actkey' => $actkey, 'user_id' => $userId]); $I->amOnPage("/User/Confirm/Email?id={$userId}&actkey={$actkey}"); $I->see('Adres e-mail został pozytywnie potwierdzony'); $I->dontSeeRecord('actkeys', ['actkey' => $actkey, 'user_id' => $userId]);