guard()->check()) { return redirect($this->redirectPath()); } return view(config('admin.login_view') ?: 'admin::login'); } /** * Handle a login request. * * @param Request $request * * @return mixed */ public function postLogin(Request $request) { $credentials = $request->only([$this->username(), 'password']); $remember = (bool) $request->input('remember', false); /** @var \Illuminate\Validation\Validator $validator */ $validator = Validator::make($credentials, [ $this->username() => 'required', 'password' => 'required', ]); if ($validator->fails()) { return back()->withInput()->withErrors($validator); } if ($this->guard()->attempt($credentials, $remember)) { return $this->sendLoginResponse($request); } return back()->withInput()->withErrors([ $this->username() => $this->getFailedLoginMessage(), ]); } /** * User logout. * * @return Redirect|string */ public function getLogout(Request $request) { $this->guard()->logout(); $request->session()->invalidate(); $path = admin_url('auth/login'); if ($request->pjax()) { return ""; } return redirect($path); } /** * User setting page. * * @param Content $content * * @return Content */ public function getSetting(Content $content) { $form = $this->settingForm(); $form->tools( function (Form\Tools $tools) { $tools->disableList(); } ); return $content ->header(trans('admin.user_setting')) ->body($form->edit(Admin::user()->id)); } /** * Update user setting. * * @return \Symfony\Component\HttpFoundation\Response */ public function putSetting() { $form = $this->settingForm(); if (!$this->validateCredentialsWhenUpdatingPassword()) { $form->addValidationMessages('old_password', trans('admin.old_password_error')); } return $form->update(Admin::user()->id); } protected function validateCredentialsWhenUpdatingPassword() { $user = Admin::user(); $oldPassword = \request('old_password'); $newPassword = \request('password'); if ( (!$newPassword) || ($newPassword === $user->getAuthPassword()) ) { return true; } if (!$oldPassword) { return false; } return $this->guard() ->getProvider() ->validateCredentials($user, ['password' => $oldPassword]); } /** * Model-form for user setting. * * @return Form */ protected function settingForm() { $form = new Form(new Administrator()); $form->disableCreatingCheck(); $form->disableEditingCheck(); $form->disableViewCheck(); $form->tools(function (Form\Tools $tools) { $tools->disableView(); $tools->disableDelete(); }); $form->display('username', trans('admin.username')); $form->text('name', trans('admin.name'))->rules('required'); $form->image('avatar', trans('admin.avatar')); $form->password('old_password', trans('admin.old_password')); $form->password('password', trans('admin.password'))->rules('confirmed|required'); $form->password('password_confirmation', trans('admin.password_confirmation'))->rules('required') ->default(function ($form) { return $form->model()->password; }); $form->setAction(admin_base_path('auth/setting')); $form->ignore(['password_confirmation', 'old_password']); $form->saving(function (Form $form) { if ($form->password && $form->model()->password != $form->password) { $form->password = bcrypt($form->password); } }); $form->saved(function () { admin_alert(trans('admin.update_succeeded')); return redirect(admin_url('auth/setting')); }); return $form; } /** * @return string|\Symfony\Component\Translation\TranslatorInterface */ protected function getFailedLoginMessage() { return Lang::has('auth.failed') ? trans('auth.failed') : 'These credentials do not match our records.'; } /** * Get the post login redirect path. * * @return string */ protected function redirectPath() { if (method_exists($this, 'redirectTo')) { return $this->redirectTo(); } return $this->redirectTo ?: config('admin.route.prefix'); } /** * Send the response after the user was authenticated. * * @param \Illuminate\Http\Request $request * * @return \Illuminate\Http\Response */ protected function sendLoginResponse(Request $request) { admin_alert(trans('admin.login_successful')); $request->session()->regenerate(); return redirect()->intended($this->redirectPath()); } /** * Get the login username to be used by the controller. * * @return string */ protected function username() { return 'username'; } /** * Get the guard to be used during authentication. * * @return \Illuminate\Contracts\Auth\StatefulGuard */ protected function guard() { return Admin::guard(); } }