【问题标题】:Hash::check not returning appropriate resultHash::check 没有返回适当的结果
【发布时间】:2015-11-06 19:26:20
【问题描述】:

我有一个users 表,其中存储了注册用户的username, email, password。密码在保存到各自的表记录之前通过Hash::make() 函数进行哈希处理。

我正在尝试从头开始手动创建 AuthController 模块。

在我的authenticate() 函数中,我正在检查尝试登录的用户输入的密码是否与用户名对应的哈希密码匹配,如下所示:

public function authenticate(AuthRequest $request)
{
    $hashedPassword = User::where('name', $request->name)
        ->select('password')
        ->get();

    $auth = Hash::check($request->password, $hashedPassword);

    //Die dumping just to check if the hash check has worked
    dd($auth);
}

这里,AuthRequest 是 Request 类,它在将 $request 变量传递给 authenticate() 函数之前验证表单输入。

现在,很遗憾,Hash::check() 函数没有按预期响应。如上所示,我正在尝试验证用户在登录表单中输入的密码是否与数据库表中的散列密码匹配。但尽管输入的密码与散列密码相同,$auth 变量仍会收到 false 值。

【问题讨论】:

  • 不熟悉 Laravel 但我希望 get 返回一个数组?

标签: php laravel authentication hash


【解决方案1】:

get 返回一个集合。直接获取值,使用value方法:

$hashedPassword = User::where($request->only('name'))->value('password');

阅读the docs,在Retrieving A Single Row/Column From A Table部分标题下。


P.S.如果您使用的是旧版本的 Laravel,则该方法称为 pluck

【讨论】:

    【解决方案2】:

    get 更改为first 以返回第一项而不是集合

    $user = User::where('name', $request->name)
        ->select('password')
        ->first();
    
    $hashedPassword = $user->password;
    

    【讨论】:

      猜你喜欢
      • 2019-08-15
      • 2014-02-25
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 2020-02-14
      • 2019-10-13
      • 1970-01-01
      • 2018-01-20
      相关资源
      最近更新 更多