Lumen,身份验证尝试总是 returns false(jwt 或 auth)
Lumen, authentication attempt always returns false (jwt or auth)
我用 php 流明框架做了一个小 API。
现在我正在为我的应用程序集成 jwt 身份验证(遵循此教程 http://laravelista.com/json-web-token-authentication-for-lumen/),但是当我尝试登录时,它总是 returns 错误...
直接jwt
似乎没有问题,因为令牌生成有效,但只有登录无效。如我所见,jwt
使用 Lumen Auth::
登录,所以为了确保我尝试直接使用 Auth::attempt()
而不是 JWTAuth::attempt
登录,但结果是 false
也...
这是我的代码:
try
{
$validation = $this->validate($request, [
'email' => 'required|email',
'password' => 'required'
]);
$credentials = $request->only('email', 'password');
$isAuthenticated = Auth::attempt($credentials) || JWTAuth::attempt($credentials);
$user = User::first();
$token = JWTAuth::fromUser($user);
$result = [
'isAuthenticated' => $isAuthenticated,
'token' => $token
];
// ... catch exceptions + return $result or errors from exceptions
我做了一些搜索来纠正这类问题的常见错误,我已经检查过:
- 我有一个名为
users
的 table
- 其中我有一个
password
列和一个 email
列(全小写名称)
- db
password
列是 varchar(140)
并尝试创建并登录这样的用户:
$user = new User;
$user->email = 'example@domain.com';
$user->password = Hash::make('passwordExample');
$user->save();
//And login with it:
$userData = array(
'email' => 'example@domain.com',
'password' => 'passwordExample');
return (string) Auth::attempt($userData));
- 我的身份验证配置包含:
'driver' => env('AUTH_DRIVER', 'eloquent'),
'model' => 环境('AUTH_MODEL', 'App\Models\User'),
'table' => 环境('AUTH_TABLE', 'users'),
- 我的
App\Models\User
模型 implements Illuminate\Contracts\Auth\Authenticatable
并使用 Illuminate\Auth\Authenticatable
但没有变化...我总是得到 'false'!
可能是什么问题?
以下是我使用的框架版本(来自composer.json)
"laravel/lumen-framework": "5.1.*",
"vlucas/phpdotenv": "~1.0",
"doctrine/dbal": "~2.3",
"illuminate/mail": "^5.1",
"tymon/jwt-auth": "^0.5.6",
"basicit/lumen-vendor-publish": "^1.0",
"illuminate/support": "5.1.25",
"illuminate/routing": "5.1.25"
注意:我还注意到,对于同一个密码,哈希两次,结果是不一样的。正如我所读,这是正常的,并且 Auth 知道如何检查散列存储的密码。但我不明白......如果散列结果永远不一样,他如何检查密码?它为每个散列存储一个盐?
嗯...花了我一段时间,但我想出了如何正确登录...
如果我设置密码而不对其进行哈希处理:
$user = User::select('id', 'email')
->where('email', $email)
->first();
$user->password = $newPassword;
$user->save();
我在数据库中查看了插入的内容,密码是加密存储的...
然后如果我尝试登录:
$this->validate($request, [
'email' => 'required|email|max:255',
'password' => 'required'
]);
$credentials = $request->only('email', 'password');
if ( $token = JWTAuth::attempt($credentials) )
...
它工作正常。
所以我的问题是我在插入密码之前对密码进行了两次哈希处理。
但我真的不明白为什么它会自动散列,因为正如我在文档中看到的那样,我必须明确地这样做。所以如果有人能给我原因,我会很想知道的。
反正我应该直接用Hash::needsRehash($hashed)
...
我用 php 流明框架做了一个小 API。
现在我正在为我的应用程序集成 jwt 身份验证(遵循此教程 http://laravelista.com/json-web-token-authentication-for-lumen/),但是当我尝试登录时,它总是 returns 错误...
直接jwt
似乎没有问题,因为令牌生成有效,但只有登录无效。如我所见,jwt
使用 Lumen Auth::
登录,所以为了确保我尝试直接使用 Auth::attempt()
而不是 JWTAuth::attempt
登录,但结果是 false
也...
这是我的代码:
try
{
$validation = $this->validate($request, [
'email' => 'required|email',
'password' => 'required'
]);
$credentials = $request->only('email', 'password');
$isAuthenticated = Auth::attempt($credentials) || JWTAuth::attempt($credentials);
$user = User::first();
$token = JWTAuth::fromUser($user);
$result = [
'isAuthenticated' => $isAuthenticated,
'token' => $token
];
// ... catch exceptions + return $result or errors from exceptions
我做了一些搜索来纠正这类问题的常见错误,我已经检查过:
- 我有一个名为
users
的 table
- 其中我有一个
password
列和一个email
列(全小写名称) - db
password
列是 varchar(140) 并尝试创建并登录这样的用户:
$user = new User; $user->email = 'example@domain.com'; $user->password = Hash::make('passwordExample'); $user->save(); //And login with it: $userData = array( 'email' => 'example@domain.com', 'password' => 'passwordExample'); return (string) Auth::attempt($userData));
- 我的身份验证配置包含:
'driver' => env('AUTH_DRIVER', 'eloquent'), 'model' => 环境('AUTH_MODEL', 'App\Models\User'), 'table' => 环境('AUTH_TABLE', 'users'),
- 我的
App\Models\User
模型implements Illuminate\Contracts\Auth\Authenticatable
并使用Illuminate\Auth\Authenticatable
但没有变化...我总是得到 'false'! 可能是什么问题?
以下是我使用的框架版本(来自composer.json)
"laravel/lumen-framework": "5.1.*",
"vlucas/phpdotenv": "~1.0",
"doctrine/dbal": "~2.3",
"illuminate/mail": "^5.1",
"tymon/jwt-auth": "^0.5.6",
"basicit/lumen-vendor-publish": "^1.0",
"illuminate/support": "5.1.25",
"illuminate/routing": "5.1.25"
注意:我还注意到,对于同一个密码,哈希两次,结果是不一样的。正如我所读,这是正常的,并且 Auth 知道如何检查散列存储的密码。但我不明白......如果散列结果永远不一样,他如何检查密码?它为每个散列存储一个盐?
嗯...花了我一段时间,但我想出了如何正确登录...
如果我设置密码而不对其进行哈希处理:
$user = User::select('id', 'email')
->where('email', $email)
->first();
$user->password = $newPassword;
$user->save();
我在数据库中查看了插入的内容,密码是加密存储的...
然后如果我尝试登录:
$this->validate($request, [
'email' => 'required|email|max:255',
'password' => 'required'
]);
$credentials = $request->only('email', 'password');
if ( $token = JWTAuth::attempt($credentials) )
...
它工作正常。
所以我的问题是我在插入密码之前对密码进行了两次哈希处理。
但我真的不明白为什么它会自动散列,因为正如我在文档中看到的那样,我必须明确地这样做。所以如果有人能给我原因,我会很想知道的。
反正我应该直接用Hash::needsRehash($hashed)
...