/** * Store a newly created user in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // Validate the form data $result = $this->validate($request, ['email' => 'required|email|max:255|unique:users', 'password' => 'required|confirmed|min:6']); // Assemble registration credentials and attributes $credentials = ['email' => trim($request->get('email')), 'password' => $request->get('password'), 'first_name' => $request->get('first_name', null), 'last_name' => $request->get('last_name', null)]; $activate = (bool) $request->get('activate', false); // Attempt the registration $result = $this->authManager->register($credentials, $activate); if ($result->isFailure()) { return $result->dispatch; } // Do we need to send an activation email? if (!$activate) { $code = $result->activation->getCode(); $email = $result->user->email; Mail::queue('centaur.email.welcome', ['code' => $code, 'email' => $email], function ($message) use($email) { $message->to($email)->subject('Your account has been created'); }); } // Assign User Roles foreach ($request->get('roles', []) as $slug => $id) { $role = Sentinel::findRoleBySlug($slug); if ($role) { $role->users()->attach($result->user); } } $result->setMessage("User {$request->get('email')} has been created."); return $result->dispatch(route('users.index')); }
/** * Handle a Logout Request * @return Response|Redirect */ public function getLogout(Request $request) { // Terminate the user's current session. Passing true as the // second parameter kills all of the user's active sessions. $result = $this->authManager->logout(null, null); // Return the appropriate response return $result->dispatch(route('utama')); }
/** * Activate a user if they have provided the correct code * @param string $code * @return Response|Redirect */ public function getActivate(Request $request, $code) { // Attempt the registration $result = $this->authManager->activate($code); if ($result->isFailure()) { // Normally an exception would trigger a redirect()->back() However, // because they get here via direct link, back() will take them // to "/"; I would prefer they be sent to the login page. $result->setRedirectUrl(route('auth.login.form')); return $result->dispatch(); } // Ask the user to check their email for the activation link $result->setMessage('Registration complete. You may now log in.'); // There is no need to send the payload data to the end user $result->clearPayload(); // Return the appropriate response return $result->dispatch(route('dashboard')); }
/** * Process a password reset form submission * @param Request $request * @param string $code * @return Response|Redirect */ public function postReset(Request $request, $code) { // Validate the form data $result = $this->validate($request, ['password' => 'required|confirmed|min:6']); // Attempt the password reset $result = $this->authManager->resetPassword($code, $request->get('password')); if ($result->isFailure()) { return $result->dispatch(); } // Return the appropriate response return $result->dispatch(route('auth.login.form')); }
/** @test */ public function it_does_not_resets_passwords_with_an_invalid_reset_code() { // Given $credentials = ['email' => '*****@*****.**', 'password' => 'password']; $result = $this->authManager->register($credentials); $reminder = $this->app['sentinel.reminders']->create($result->user); $newPassword = '******'; // Attempt the Reset $result = $this->authManager->resetPassword('incorrect_reset_code', $newPassword); // Verify $this->assertInstanceOf(ExceptionReply::class, $result); $this->assertEquals("Invalid or expired password reset code; please request a new link.", $result->message); }