我正在使用laravel,并试图用Laravel passport
生成Authenthication
。所以我通过查看文档和youtube完成了这项工作,但我出现了这个错误。这是我请求的AuthController
和错误。
AuthController.php
public function register(Request $request)
{
$validatedData = $request->validate([
'name'=>'required|max:55',
'email'=>'email|required|unique:users',
'password'=>'required|confirmed',
'who'=>'required'
]);
$validatedData['password'] = bcrypt($request->password);
$user = User::create($validatedData);
// Get access token
$accessToken = $user->createToken('authToken')->accessToken;
return response(['user' => $user, 'access_token' => $accessToken]);
}
错误异常
{
"message": "Trying to get property 'secret' of non-object",
"exception": "ErrorException",
"file": "C:\Panji\xampp\htdocs\papa\vendor\laravel\passport\src\PersonalAccessTokenFactory.php",
"line": 96,
"trace": [
{
"file": "C:\Panji\xampp\htdocs\papa\vendor\laravel\passport\src\PersonalAccessTokenFactory.php",
"line": 96,
"function": "handleError",
"class": "Illuminate\Foundation\Bootstrap\HandleExceptions",
"type": "->"
},
{
"file": "C:\Panji\xampp\htdocs\papa\vendor\laravel\passport\src\PersonalAccessTokenFactory.php",
"line": 71,
"function": "createRequest",
"class": "Laravel\Passport\PersonalAccessTokenFactory",
"type": "->"
},
{
"file": "C:\Panji\xampp\htdocs\papa\vendor\laravel\passport\src\HasApiTokens.php",
"line": 67,
"function": "make",
"class": "Laravel\Passport\PersonalAccessTokenFactory",
"type": "->"
},
{
"file": "C:\Panji\xampp\htdocs\papa\app\Http\Controllers\Api\AuthController.php",
"line": 26,
"function": "createToken",
"class": "App\User",
"type": "->"
},
{
"function": "register",
"class": "App\Http\Controllers\Api\AuthController",
"type": "->"
},
{
"file": "C:\Panji\xampp\htdocs\papa\vendor\laravel\framework\src\Illuminate\Routing\Controller.php",
"line": 54,
"function": "call_user_func_array"
},
{
"file": "C:\Panji\xampp\htdocs\papa\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php",
"line": 45,
"function": "callAction",
"class": "Illuminate\Routing\Controller",
"type": "->"
},
{
"file": "C:\Panji\xampp\htdocs\papa\vendor\laravel\framework\src\Illuminate\Routing\Route.php",
"line": 225,
"function": "dispatch",
"class": "Illuminate\Routing\ControllerDispatcher",
"type": "->"
},
.
.
.
}
我在谷歌上搜索过,但没有找到任何提到Trying to get property 'secret' of non-object
的东西。我试过php artisan passport:install
,所以我得到了personal_access_clients
,但什么都不管用。
NB
它实际上已经注册了用户,但得到了这个错误响应。
这适用于LARAVEL 7和LARAVEL/PASSPORT 9.0
第一件事是运行php artisan passport:client --personal
。
在数据库表oauth_clients中,在name列下,查找Laravel Personal Access Client[/em>。
复制Laravel Personal Access Client
旁边的秘密。
打开AuthServiceProvider
,然后将机密粘贴到boot方法中,其中CLIENT_SECRET
如下:
Passport::personalAccessClientSecret(config('CLIENT_SECRET'));
别忘了从数据库中添加机密的ID。
Passport::personalAccessClientId(config('ID'));
注意:将引号与ID和CLIENT_SECRET一起使用,因为config((应该得到一个字符串。
运行以下命令:php artisan passport:install --force
,然后重试。
在项目中使用Passport时遇到类似错误。从移动应用程序注册用户时获取响应-使用OTP而不是密码进行注册。
对我来说,这个错误是由于执行php artisan migrate:fresh
而产生的,因为这是删除数据库中存在的所有oauth数据。
因此,只需在运行新的迁移后使用php artisan passport:client --personal
,错误就得到了解决。
从.env文件中删除这两行对我有效
PASSPORT_PERSONAL_ACCESS_CLIENT_ID="client-id-value"
PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET="unhashed-client-secret-value"
运行命令:php artisan passport:install --force
输出将类似于:
成功生成加密密钥。已成功创建个人访问客户端
客户端ID:24332432-2343-3423-8c52-2342333
客户端机密:dfgdfgfdgfdgdfBvV3esUczLMkWsJ
成功创建密码授予客户端
客户端ID:92342333-4233-4343-9234-32423
客户端机密:D3FD5fd5f5dmfmdDmffDmffmdDmfcmdn
打开.env文件,从上面的密码访问客户端行粘贴客户端id和客户端机密,如下所示:
PASSPORT_PERSONAL_ACCESS_CLIENT_ID=24332432-2343-3423-8c52-2342333PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET=dfgdfgfdgfdgdfBvV3esUczLMkWsJ
Passport中唯一使用该名称属性的代码是映射到oauth_clients
DB表的模型LaravelPassportClient
,因此我建议检查该表是否已创建并可供您的应用程序访问。
如果您只想为用户进行身份验证,那么passport就太过分了。但是,如果您想要passport,请在这种情况下使用passwordgrant。您使用的是authorizationcodegrant类型,并且您的代码中丢失了机密客户端密钥
https://laravel-news.com/passport-grant-types
我刚刚在.env文件中添加了Passport Personal Access Client的详细信息
PASSPORT_PERSONAL_ACCESS_CLIENT_ID=94d36aec-fca4-46dd-b851-b4ca72a1cfe9
PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET=C73SddSiirwKZzo3JxG0NcwNkASyOEynQq8bTQ3o