修改 Laravel 的 Auth 的 login 方法

因为Authlogin方法不能验证is_active字段, 或者验证不能正确的提示错误消息(或者有我不知道的方法)
我的代码是这样的

public function login(Request $request)
    {
        $this->validateLogin($request);

        // 多次登录失败上锁
        if ($this->hasTooManyLoginAttempts($request)) {
            $this->fireLockoutEvent($request);

            return $this->sendLockoutResponse($request);
        }

        // 试图登录
        if ($this->attemptLogin($request)) {

            // 获取当前登录用户
            $user = $this->guard()->user();

            // 如果用户没有激活  !!!  TODO
            if (! $this->userRepository->isActive($user))
            {
                // 退出登录
                Auth::logout();

                return back()->withInput()->withErrors([$this->username() => '账户未激活']);
            }

            return $this->sendLoginResponse($request);
        }

        // 如果登录尝试不成功,我们将增加次数
        // 登录并将用户重定向到登录表单。当然,当这
        // 用户超过他们的尝试,他们将被锁定的最大数量。
        $this->incrementLoginAttempts($request);

        return $this->sendFailedLoginResponse($request);
    }

我在原生的验证登录之后才做了判断是都为激活用户, 如果不是,然后使用Auth::logout()注销用户 (我使用 $this->guard()->login($user) 不能注销,也望回答一下)。
但感觉多做了一步,可以可以在未登录时验证一下? 用 Auth的方法有吗?

当神不再是我们的信仰,那么信仰自己吧,努力让自己变好,不辜负自己的信仰!
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

@IceBay 这个我也看过,但是语言解决的问题是,当返回错误的时候我怎么才能知道是用户密码错误还是用户未激活?

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!