![cppcolors | Embarcadero RAD Studio Delphi C++Builder Blogs](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2020/08/cpp_colors.jpg?resize=1140%2C628&ssl=1)
Author: Yai_np
「LINE Login」はOAuth 2.0を利用したユーザー管理サービスです。
LINEのアカウントを持つユーザーが簡単に他のサービスと繋がる事ができます
Delphi/C++BuilderではTRESTClient + TRESTRequest + TOAuth2Authenticatorを使えばOAuth 2.0が利用できます
OAuth 2.0の詳しい内容は下記のURLを参照してください。
https://openid-foundation-japan.github.io
[OAuth 2.0 仕組み]
Authorization codeを受けとって特定のエンドポイントに返す事でAccess Tokenを取得できます。
取得したAccess Tokenを使ってAPIサービスが利用できるようになります。
LINE Loginの場合profileを取得するAPIサービスです
[LINE Loginを利用するメリット]
LINE Login機能をサービスに組み込むことにより、ユーザーがLINEで簡単にサービスに
ログインすることが可能となります。
ログインしたユーザーから「表示名」、「プロフィール画像」と「ひとこと」を取得することができるため、
ユーザーに登録していただく作業が必要なくなります。
[LINE Login 企業登録]
LINE Loginを使うには、LINE Business Center( https://business.line.me/ )で登録が必要です。
登録後アカウントを作成します
[認証画面からのコールバックURLの指定が必須]
作成されたアカウントのChannel ID、Channel Secretが必要です。
[Delphi / C++Builder から接続]
新規プロジェクトを作成しフォーム上にTWebBrowser, TRESTClient,TRESTRequest,TRESTResponse, TOAuth2Authenticatorを配置しました。
上絵のように、Channel ID = ClientID、Channel Secret=ClientSecretに設定。
RedirectionEndpointにはコールバックで設定したURLが必要です。
[C++Builderで実装]
developers.line.me の仕様にしたがってwebloginにTWebBrowser側で接続します
1 2 3 4 5 6 |
//// //C++コード UnicodeString stURL = TNetEncoding::URL->Encode("http://******/"); stURL = "https://*****/weblogin?response_type=code&client_id=****&redirect_uri=" + stURL + "&state=****"; WebBrowser1->URL = stURL; |
ログイン画面 ユーザーID,パスワード入力後 URLがリダイレクトされる
WebBrowser1->OnDidFinishLoadイベントが呼ばれるのでそこで下記の処理を行う
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
//// //C++コード void __fastcall TForm1::WebBrowser1DidFinishLoad(TObject *ASender) { UnicodeString stURL = WebBrowser1->URL; #ifdef _WIN64 wchar_t code_[stURL.Length()]; wmemset(code_, 0x00, stURL.Length() ); #endif int ipos = Pos(L"code=", WebBrowser1->URL);//URLにコードがあれば1以上が入る if ((ipos > 0) && (! oauth )) { UnicodeString stTemp; #ifdef _WIN64 wcsncpy(code_, stURL.w_str() + ipos + 4, stURL.Length()); stTemp = code_; #else stTemp = stURL.SubString(ipos + 4, stURL.Length()); #endif int ipos2 = Pos(L"&state=", stTemp); if (ipos2 > 0) { #ifdef _WIN64 wmemset(code_, 0x00, stURL.Length() ); wcsncpy(code_, stTemp.w_str(), ipos2-1); stTemp = code_; #else stTemp = stTemp.SubString(0, ipos2-1); #endif OAuth2Authenticator1->AuthCode = stTemp;//取得したcodeを入れる TThread::CreateAnonymousThread([&]() { OAuth2Authenticator1->ChangeAuthCodeToAccesToken();//AccesTokenを取得するメソッドを実行する TThread::Synchronize(TThread::CurrentThread,[&]() { //ここで取得した内容を処理 }); } )->Start(); oauth = true; } } } |
- OAuth2Authenticator1->AuthCode//にコードを入れる
- OAuth2Authenticator1->ChangeAuthCodeToAccesToken()//実行する。
- OAuth2Authenticator1->AccessToken//ここにAccessToken入る
- AccessTokenを使ってTRESTClient,TRESTRequestでLINEのprofileを取得
JSONフォーマットでLINEのユーザープロファイル情報が取得できます。
テストした内容はLINEですがOAuth 2.0を使う方法なのでFacebookやGoogle+, Yahoo ID, dアカウントなどでも応用できます。
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition