即使输入和哈希正确,Auth::attempt 也总是返回 false

时间:2021-07-17 21:45:06

标签: laravel eloquent jwt lumen

我使用的是 laravel lumen 框架 v8 并在以下网站上使用 jwt 身份验证 https://jwt-auth.readthedocs.io/en/develop/lumen-installation/

这是我在我的项目中使用的一些代码片段

<?php
return [
   'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    'guards' => [
        'web' => [
          'driver' => 'jwt',
          'provider' => 'users'
        ],
      ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ]
    ]
];

cofig/auth.php

我也在 bootstrap/app.php 和所有其他配置下注册了这个文件

这是我的控制器登录功能的样子

public function login(Request $request)
    {

        $email = $request->input('email');
        $pass = $request->input('password');

        $credentials = [
            'email'=>$email,
            'password'=>md5($pass)
        ];

        dd( Auth::attempt($credentials));
                //return response()->json($credentials);
        if (! $token = auth('web')->attempt($credentials)) {
            return response()->json(['error' => 'Unauthorizedsfwe'], 401);
        }

        return $this->respondWithToken($token);
    }

我正在使用我现有的项目数据库,密码以以下形式存储 MD5 所以我也试过这种方式 像上面一样,但即使我也尝试使用直接哈希 MD5 登录但它仍然无法正常工作

但是当我尝试从 PHPMyAdmin 上的响应目录运行它时

return response()->json($credentials);

它有效但不适用于 auth('web')->attempt() 方法

2 个答案:

答案 0 :(得分:0)

我记得当您将凭据传递给尝试方法时,您不应该对密码进行散列,它会处理密码散列。您可以在此处查看 EloquentUserProvider.phpvalidateCredentials 方法:https://github.com/laravel/framework/blob/574aaece57561e4258d5f9ab4275009d4355180a/src/Illuminate/Auth/EloquentUserProvider.php#L154-L159

它使用内置哈希器。

因此,您似乎需要覆盖默认哈希行为并使用 MD5 代替它。当我在 Stackoverflow 上搜索它时,我发现了这个:https://stackoverflow.com/a/44126955/1977031

它只是创建一个实现 MD5HasherIlluminate\Contracts\Hashing\Hasher 并使用 md5 来生成哈希。并将其注册到服务提供者中,以便在需要 MD5Hasher

时为应用程序提供 Hasher

答案 1 :(得分:0)

感谢您的回答,我的答案基本上是我的代码会做什么。只需使用 md5 和另一次幼虫默认散列对我的密码进行两次散列,这是我的它不起作用也许我必须禁用散列或仅使用 MD5 覆盖默认散列

现在我直接尝试这样对我有用

 public function login(Request $request)
{

    $email = $request->input('email');
    $pass = $request->input('password');

    $credentials = [
        'email'=>$email,
        'password'=>md5($pass)
    ];


            //return response()->json($credentials);

    $user = User::where('email', $request->email)
        ->where('password',md5($request->password))->first();
  
    if (! $token =  Auth::login($user)) {
        return response()->json(['error' => 'Unauthorizedsfwe'], 401);
    }
    

   return $this->respondWithToken($token);
}
相关问题