質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

5316閲覧

Laravel Line Socialite ログイン認証機能でのエラー

FigHy

総合スコア19

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2018/06/02 16:03

編集2018/06/03 13:04

質問失礼致します。

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)); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/06/02 22:51 編集

APIの仕様は確認されました? https://developers.line.me/ja/docs/messaging-api/reference/ いずれにしても現在の質問内容だけでは「何が悪い」というは分かりません。リクエストを送るところが最低限必要です。(IDなどはマスクかけてください)
FigHy

2018/06/02 23:57

追記致しました;リクエストということは、やはりここらへんのコードに不備があ理ますでしょうか...
m.ts10806

2018/06/03 00:09

APIの仕様のページを提示したのですが、確認されたのでしょうか。400エラーはどうなっていますか?
FigHy

2018/06/03 00:53

リクエストに問題がありますとなっています。送る部分ということは..!
guest

回答1

0

ベストアンサー

なんでSocialiteと書いてないんだろう…。
ソーシャルログインのドキュメントはこっち。
https://developers.line.me/ja/docs/line-login/web/integrate-line-login/

LINEのSocialiteなんて過去に何人も作ってるのでこういうのを参考にすればいいだけ。日本語の情報は間違ってることが多いので見てはいけない。
https://github.com/SocialiteProviders/Line/blob/master/Provider.php

見てすぐ分かるのはX-Line-ChannelTokenが違う。

投稿2018/06/03 00:59

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FigHy

2018/06/03 13:02

遅くなりすみません。 確かに、Socialiteと書いた方がわかりやすかったです... 日本人の記事を見ていたので、確かに少し記述が違いますね。 上記参考にとりあえず記述を直しましたが、エラー内容は変わらずです。。 だいぶはまっております泣 ちょっとよくわからなくなってきました;^^
FigHy

2018/06/03 13:11

ログインいけました! ただ、こちらのエラーになりました; Call to undefined method Laravel\Socialite\Two\User::setAccessTokenResponseBody()
FigHy

2018/06/03 13:31

ほぼコピペしてしまったので、現在調査中です。すみません
FigHy

2018/06/04 02:48

一旦こちら、閉じさせていただき、新しく投稿したいと思います! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問