Laravelは初めてです。Laravelバージョン5.5を使用しました
Postmanでログインしようとすると、「非オブジェクトのプロパティ 'id'を取得しようとしています」というエラーが表示されます。エラー行は
private $client;
public function __construct(){
$this->client = Client::find(1);
}
public function login(Request $request){
$this->validate($request, [
'username' => 'required',
'password' => 'required'
]);
return $this->issueToken($request, 'password'); // this line has error
}
issueToken関数
public function issueToken(Request $request, $grantType, $scope = ""){
$params = [
'grant_type' => $grantType,
'client_id' => $this->client->id,
'client_secret' => $this->client->secret,
'scope' => $scope
];
if($grantType !== 'social'){
$params['username'] = $request->username ?: $request->email;
}
$request->request->add($params);
$proxy = Request::create('oauth/token', 'POST');
return Route::dispatch($proxy);
}
Registerで同じエラーが発生しましたが、ユーザーは500エラーで正常に登録されました(非オブジェクトのプロパティ 'id'を取得しようとしています)
find()
がレコードを見つけられないときに$this->client
がnullになるためです。レコードが存在するかどうかを確認する必要があります。
変更:
$this->client = Client::find(1);
To:
$this->client = Client::findOrFail(1);
ドキュメント:
Laravel Eloquent docs から、指定されたIDのレコードが見つからない場合、404
エラーがスローされます。
ID = 1のUserモデルのデータベーステーブルにレコードがあることを確認してください。User:: find(1)を使用している場合Laravelレコードが存在しない場合、データベースからこのレコードを取得しようとしますこれはnullを返します
issueToken()
メソッドで
$client = Client::find(1);
if($client!=null){
$params = [
'grant_type' => $grantType,
'client_id' => $client->id,
'client_secret' => $client->secret,
'scope' => $scope
];
}else{
$params = [
'grant_type' => $grantType,
'client_id' => null,
'client_secret' => null,
'scope' => $scope
];
}
プロジェクトデータベースに存在しないIDにアクセスしようとしても、同じ問題が発生しました。これは$user= user::findOrFail($id);
で私の問題を解決しました。