1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravel8の認証をUnityで使えるか

Last updated at Posted at 2022-07-19

Laravel8の認証をUnityで使えるか(読み出しのみ)

やりたいこと

Unityでデスクトップアプリを作りたいんだけど、認証は既存のLaravelを使いたい。

前提条件

  • Laravel8
  • Jetstream導入済み
  • Unityは2020のLTS(WebRequest使用のため)

以下は全てDockerで実施しています。

最初に迷ったこと

LaravelにAPIって言れようと検索するとSanctumを入れなさいとでてくるので、composerで入れようとしました。で、php artisanやっても"Nothing to migrate."と出てきました。

いつのまにか寝ぼけてインストールしたのかと思ったんですが、どうやたJetstreamにはSacntumが導入されているようです。

認証どっち?

Sanctumには2種類の認証があるらしい

  • APIトークン
  • SPA認証

今回はAPIトークン認証にしてみました。

Laravel側の流れ

LaravelのAPI認証を有効にする

Jetstream導入済みのLaravelでAPI認証を有効にするには、config/jetstream.phpの Features::api()のコメントを外します。(デフォルトはコメントアウトだったと思います)

    'features' => [
        // Features::termsAndPrivacyPolicy(),
        // Features::profilePhotos(),
        // Features::api(),
        Features::teams(['invitations' => true]),
        Features::accountDeletion(),
    ],

    'features' => [
        // Features::termsAndPrivacyPolicy(),
        // Features::profilePhotos(),
        Features::api(),//<--コメントアウト外す
        Features::teams(['invitations' => true]),
        Features::accountDeletion(),
    ],

参考サイト

App/ProvidersのJetstreamServiceProviderのパーミッション設定はすでにあるかと思いますので、今回は設定しませんでした。

トークンを発行する

この時点ですでにトークンが発行できるようですので、プロフィールページからAPIトークンを作成し、APIトークンの作成からトークンを作成できます。

image.png

image.png

image.png

APIが動作するか確認をする

Unityでのコーディングに入る前にAPIが動作するか確認をしたいのですが、いちいちコーディングするのも大変だなぁと思っていたらPosmanという面白そうなツールがありました。
https://www.postman.com/

デスクトップ版をダウンロードし、SignUpします。
チュートリアルを終了し、GETでURLはLaaravelのローカルアドレスにします。TypeはBearer Tokenとします。ここではuserデータを取得するものにしています。
image.png

Sendを押すと、JSON形式でuserデータが無事取得できました。
image.png

Unity側のスクリプト

以下で取得できます。

networkConnection.cs
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

//後で個別に取り出す用
[System.Serializable]
public class Player
{
    public string name;
    public int current_team_id;
}


public class networkConnection : MonoBehaviour
{

    private string accessToken = "TOKEN HERE";//ここにトークンを入れます

    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(APIExample());
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    IEnumerator APIExample()
    {

        string url = "http://localhost:8000/api/user";//APIアクセス先URL

        using (UnityWebRequest request = UnityWebRequest.Get (url)) {//GETで取得します

            request.SetRequestHeader("Authorization","Bearer " + accessToken);
//Bearerのrの後の半角スペース必要

            yield return request.Send ();

            switch (request.result)
                        {
                            case UnityWebRequest.Result.ConnectionError:
                            Debug.Log("サーバとの通信に失敗");
                            break;
                            case UnityWebRequest.Result.DataProcessingError:
                                Debug.LogError("データの処理中にエラー ");
                                break;
                            case UnityWebRequest.Result.ProtocolError:
                                Debug.LogError("HTTPのエラー");
                                break;
                            case UnityWebRequest.Result.Success:
                                Debug.Log("成功:取得結果は→" + request.downloadHandler.text);

                                //JSONをオブジェクトにする
                                string jsonstr = request.downloadHandler.text;
                                Player player2 = JsonUtility.FromJson<Player> (jsonstr);
                                Debug.Log (player2.name);//ユーザ名
                                Debug.Log (player2.current_team_id);//チームID
                                break;
                        }

                    };

                }

}

スクリプトの参考サイトは以下のとおりです
https://gomafrontier.com/unity/2475#Unity

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?