Laravel 5.1 - 验证用户名、密码和如果确认 = 1

Posted

技术标签:

【中文标题】Laravel 5.1 - 验证用户名、密码和如果确认 = 1【英文标题】:Laravel 5.1 - Authenticate Username, Password AND if confirmed = 1 【发布时间】:2016-05-18 12:53:26 【问题描述】:

在看似简单的任务上拉扯我的头发。我使用以下代码在我的AuthController 中使用username 而不是email

/**
 * Set the login system to use username instead of email address
 * @var string
 */
protected $username = 'username';

这在很长一段时间内都运行良好(当我不打算让用户激活他们的帐户时)。但是,现在我需要用户激活他们的帐户,我知道我需要在登录时进行额外的检查,然后他们才能看到他们的仪表板。

我已将下面的postLogin() 方法修改为我认为正确的:

public function postLogin(Request $request)

    $this->validate($request, [
        'username' => 'required', 'password' => 'required',
    ]);

    $credentials = $request->only('username', 'password');
    $credentials = array_add($credentials, 'confirmed', '1');

    if ($this->auth->attempt($credentials, $request->has('remember')))
    
        return redirect()->intended($this->redirectPath());
    

    return redirect($this->loginPath())
                ->withInput($request->only('username', 'remember'))
                ->withErrors([
                    'username' => $this->getFailedLoginMessage(),
                ]);

但我得到的只是以下错误:

Undefined property: App\Http\Controllers\Auth\AuthController::$auth

我做错了什么?

安迪

【问题讨论】:

我认为问题不是从这段代码开始的。你能发布你的 AuthController 吗? 没有这段代码就好了 【参考方案1】:

我在那里看到的只是一个小故障。

if ($this->auth->attempt($credentials, $request->has('remember')))

应该是

if (Auth::attempt($credentials, $request->has('remember')))

【讨论】:

那行得通,但我为什么需要改变这个? 我只相信文档并遵循他们的代码。我没有时间和专业知识来评判 laravel 的设计师。 :) 我的意思是解释为什么它需要改变,而不是判断 Laravel 哈哈。通常答案会解释您为什么需要进行更改【参考方案2】:

在 Laravel 5.1 中,$auth 属性在 AuthController 类构造函数中不存在,如 5.1 upgrade guide 中所述。所以你引用了一个不存在的属性。

【讨论】:

确实,但这是一年前的事了,公平地说,这是我的第一个 Laravel 项目(没有从 Laravel 5 升级,直接进入 5.1)所以当时接受的答案是什么帮助。谢谢你的解释,希望有人会从中受益:)

以上是关于Laravel 5.1 - 验证用户名、密码和如果确认 = 1的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1 如何构建忘记密码功能

如何从 Laravel 5.1 中的表而不是“用户”表中对用户进行身份验证?

Laravel 5.1 密码重置电子邮件主题行

Laravel 5.2 - 经过身份验证的用户更改密码 - 更新后的密码匹配问题

laravel 5,更新用户密码

Laravel 更新密码通过验证但不更新记录