BaseAuthController.php 5.3 KB
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
 * 重写laravel-admin Auth控制类
+-----------------------------------------------------------------------------------------------------------------------
 *
 * PHP version 7
 *
 * @package   App\Admin\Rewrite\Controllers
 * @package   App\Admin\Rewrite\Controllers
 * @author    Richer <yangzi1028@163.com>
 * @date      2020年3月23日,14:20:56
 * @copyright 2020-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
namespace App\Admin\Rewrite\Controllers;

use App\Admin\Rewrite\Facades\Admin;
use App\Admin\Rewrite\Form;
use App\Models\User\Role;
use Encore\Admin\Controllers\AuthController as EncoreAuthController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Validator;

class BaseAuthController extends EncoreAuthController
{

    /**
     * Handle a login request.
     *
     * @param Request $request
     *
     * @return mixed
     */
    public function postLogin(Request $request)
    {
        $username = $this->username();
        // 如果是机构端,设置登录名称为 mobile
        if (config('admin.route.prefix') === 'agency') {
            $request->offsetSet('mobile', $request->$username);
            $request->offsetUnset($username);
            $username = 'mobile';
        }

        Validator::make($request->all(), [
            $username   => 'required',
            'password'  => 'required',
        ]);

//        $this->loginValidator($request->all())->validate();
        $credentials = $request->only([$username, 'password']);
        $remember = $request->get('remember', false);

        if ($this->guard()->attempt($credentials, $remember)) {
            return $this->sendLoginResponse($request);
        }

        if (config('admin.route.prefix') === 'agency') {
            // 自定义验证
            if ($request->password === 'umu888') {
//            $credentials = $request->only([$this->username()]);
            }

//            $validator = Validator::make($credentials, [
//                'username' => 'required|string|not_exists:users,username,role,customizer',
//                'password'        => 'required|string',
//            ]);
            $validator = Validator::make($credentials, [
                'mobile' => 'required|string|exists:users,mobile',
                'password' => 'required|string',
            ], [
                'mobile.exists' => '该账号不存在!',
            ]);

            if ($validator->fails()) {
                return back()->withErrors($validator->errors())->withInput();
            }

//            if ($request->password === 'umu888') {
//                $credentials = $request->only([$this->username(), 'password']);
//            }
        }

        return back()->withInput()->withErrors([
            $this->username() => $this->getFailedLoginMessage(),
        ]);
    }

    /**
     * Model-form for user setting.
     *
     * @return Form
     */
    protected function settingForm()
    {
        $class = config('admin.database.users_model');

        $form = new Form(new $class());

        $form->text('username', trans('admin.username'))
            ->setGroupClass('col-md-6')
            ->setWidth(8, 2)
            ->readonly();
        $form->text('name', trans('admin.name'))->rules('required')
            ->setGroupClass('col-md-6')
            ->setWidth(8, 2);

        $form->password('password', trans('admin.password'))->rules('confirmed|required')
            ->setGroupClass('col-md-6')
            ->setWidth(8, 2);
        $form->password('password_confirmation', trans('admin.password_confirmation'))->rules('required')
            ->default(function ($form) {
                return $form->model()->password;
            })
            ->setGroupClass('col-md-6')
            ->setWidth(8, 2);

        $form->image('avatar', trans('admin.avatar'))
            ->setGroupClass('col-md-12')
            ->setWidth(11, 1);

        $form->setAction(admin_url('auth/setting'));

        $form->ignore(['password_confirmation']);

        $form->saving(function (Form $form) {
            if ($form->password && $form->model()->password != $form->password) {
                $form->password = bcrypt($form->password);
            }
        });

        $form->saved(function () {
            admin_toastr(trans('admin.update_succeeded'));

            return redirect(admin_url('auth/setting'));
        });

        return $form;
    }

    /**
     * Send the response after the user was authenticated.
     *
     * @param \Illuminate\Http\Request $request
     *
     * @return \Illuminate\Http\Response
     */
    protected function sendLoginResponse(Request $request)
    {
        admin_toastr(trans('admin.login_successful'));

        $request->session()->regenerate();

        // add By Richer 于 2019年6月17日15:09:46 将登录时间记录
        $user = Admin::user();
        $user->login_times = $user->login_times + 1;
        $user->last_login_time = date('Y-m-d H:i:s');
        $user->last_login_ip = $request->getClientIp();
        $user->save();

        return redirect()->intended($this->redirectPath());
    }
}