質問失礼致します。
laravelでLineのログイン認証を実装しているのですが、
下記のエラーが出て詰まっています。
エラー文
Client error: `POST https://api.line.me/oauth2/v2.1/token` resulted in a `400 Bad Request` response: {"error":"invalid_request","error_description":"code is required."}
エラー箇所
return new $className($message, $request, $response, $previous, $ctx);
コード的にはここで詰まっているみたいなので、トークンの問題なのかと思うのですが...
protected function getTokenUrl() { return 'https://api.line.me/oauth2/v2.1/token'; }
自分のLineアカウントで、なんどもログインしてはコードをいじるの繰り返しをしているので、そのせいでしょうか...
トークンを取り消せばいいのかと思うのですが、やり方がよくわからず。
ご教授お願い致します。
追記→変更後
<?php namespace App\Socialite; use Laravel\Socialite\Two\AbstractProvider; use Laravel\Socialite\Two\ProviderInterface; use Laravel\Socialite\Two\User; class LineProvider extends AbstractProvider implements ProviderInterface { protected function getAuthUrl($state) { return $this->buildAuthUrlFromBase('https://access.line.me/oauth2/v2.1/authorize', $state); } protected function getTokenUrl() { return 'https://api.line.me/oauth2/v2.1/token'; } protected function getUserByToken($token) { $response = $this->getHttpClient()->get('https://api.line.me/v2/profile', [ 'headers' => [ 'Authorization' => 'Bearer '.$token, ], ]); return json_decode($response->getBody()->getContents(), true); } protected function mapUserToObject(array $user) { return (new User())->setRaw($user)->map([ 'id' => $user['userId'] ?? $user['sub'] ?? null, 'nickname' => null, 'name' => $user['displayName'] ?? $user['name'] ?? null, 'avatar' => $user['pictureUrl'] ?? $user['picture'] ?? null, 'email' => $user['email'] ?? null, ]); } protected function getTokenFields($code) { return array_merge(parent::getTokenFields($code), [ 'grant_type' => 'authorization_code', ]); } /** * @return \SocialiteProviders\Manager\OAuth2\User */ public function user() { if ($this->hasInvalidState()) { throw new InvalidStateException(); } $response = $this->getAccessTokenResponse($this->getCode()); if ($jwt = $response['id_token'] ?? null) { list($headb64, $bodyb64, $cryptob64) = explode('.', $jwt); $user = $this->mapUserToObject(json_decode(base64_decode($bodyb64), true)); } else { $user = $this->mapUserToObject($this->getUserByToken( $token = $this->parseAccessToken($response) )); } $this->credentialsResponseBody = $response; if ($user instanceof User) { $user->setAccessTokenResponseBody($this->credentialsResponseBody); } return $user->setToken($this->parseAccessToken($response)) ->setRefreshToken($this->parseRefreshToken($response)) ->setExpiresIn($this->parseExpiresIn($response)); } }
回答1件
あなたの回答
tips
プレビュー