【问题标题】:Laravel - Trying to get property 'token' of non-object", exception: "ErrorException"Laravel - 试图获取非对象的属性“令牌”,异常:“ErrorException”
【发布时间】:2019-09-20 06:31:21
【问题描述】:

我使用 Angular-7 作为前端,Laravel-5.8 作为 Web 应用程序的后端。

ApiController.php

 public function login(Request $request)
 {
   $request->validate([
    'email' => 'required|string|email',
    'password' => 'required|string',
    'remember_me' => 'boolean'
    ]);
    $credentials = request(['email', 'password']);
    $credentials['active'] = 1;
    $credentials['deleted_at'] = null;
    if(!Auth::attempt($credentials))
    return response()->json([
      'message' => 'Unauthorized'
    ], 401);

    $user = $request->user();
    $res = User::with('roles')->find($user->id);
    $tokenResult = $user->createToken('MyApp')->accessToken;
    $token = $tokenResult->token;
    if ($request->remember_me)
    $token->expires_at = Carbon::now()->addWeeks(13);
    $token->save();
    return response()->json([
      'access_token' => $tokenResult->accessToken,
      'token_type' => 'Bearer',
      'expires_at' => Carbon::parse($tokenResult->token->expires_at)->toDateTimeString(),
            'user' => response()->json($res)->original
        ]);
    }

从 Angular 前端,当我点击登录页面上的提交时,它假设重定向到主页。但是我收到了这个错误:

{消息:“尝试获取非对象的属性‘令牌’”,异常:“ErrorException”,文件:“C:\xampp\htdocs\clientportal-app\backend\app\Http\Controllers\ApiController. php",行:212,跟踪:数组(35)}

当我从上面的代码中检查 Laravel ApiController 的第 212 行时,这就是我所拥有的:

$token = $tokenResult->token;

我该如何解决?

【问题讨论】:

  • 这与角度无关,此错误在您的服务器端
  • 如何从服务器端解决?
  • 请复制 ApiController 第 212 行的代码,主要是错误在于您访问令牌值的方式
  • 你在使用 Laravel Passport 吗?
  • @Dino Numić - 是的

标签: php angular laravel


【解决方案1】:

Laravel Passport 需要以下配置。 用户模型需要使用HasApiTokens trait。

class User extends Authenticatable
{
    use Notifiable, HasApiTokens;
}

护照路由需要添加到AuthServiceProviderboot()方法中

public function boot()
    {
        $this->registerPolicies();

        Passport::routes();
    }

最后在auth配置文件中将api驱动改成passport。

'api' => [
      'driver' => 'passport',
      'provider' => 'users',
]

您需要迁移 Passport 表

php artisan migrate

并生成加密密钥

php artisan passport:install

清除缓存

php artisan config:cache

并为您的应用提供服务

php artisan serve

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-02
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2021-07-19
    相关资源
    最近更新 更多