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

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

ただいまの
回答率

90.48%

  • PHP

    20878questions

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

  • Ajax

    1117questions

    Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

  • Laravel

    695questions

    LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

laravelのauth実装時にajaxにてログインする方法

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 401

randr

score 184

やりたいこと

laravelのauthにてログイン機能を実装してあり、
そのサイトに外部システムからページ遷移してきたときに、
呼び出し元のログイン情報をもとにlaravel側でログインし、
ログイン後のページを表示したい。

やりたいこと詳細

通常のサイト
ログインページ →ログイン後 →メニューページ表示
外部サイトから
外部システム →ボタンクリック →ajaxでログイン情報をpost →laravel側のログイン処理 →ログイン後 →メニューページ表示

やってみたこと

web.php

Route::get("/login", "HomeController@showLogin");
Route::post("/login", "HomeController@doLogin");

Route::group(["middleware"=>"auth"], function(){
    Route::get("/menu", "HomeController@showMenu");
    Route::post("/menu", "HomeController@doLogout");    
});

Route::post("/api/user", "HomeController@getUser");
Route::post("/api/login", "HomeController@apilogin");


HomeController.php

class HomeController extends Controller
{
    public function showLogin() {
        return view("login");
    }

    public function doLogin() {
        $user = Auth::loginUsingId(1);
        Auth::login($user);
        return redirect("/menu");
    }

    public function showMenu() {
        $user = Auth::user();
        if(Auth::check()) {
            return view("menu");
        }
        return redirect("login");
    }

    public function doLogout() {
        Auth::logout();
        return redirect("login");
    }

    public function getUser() {
        return Auth::user()->username;
    }

    public function apilogin() {
        $user = Auth::loginUsingId(2);
        Auth::login($user);
        return "login";
    }
}


login.blade.php

<html>
    <head>
        <title>login</title>
        <script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>
        <script>
                $(function() {
                    $("#btnAPI").click(function() {
                        $.ajax({
                            type: "POST",
                            url: "/api/login",
                            headers: {
                                'X-CSRF-TOKEN': '{{csrf_token()}}'
                            }
                        })
                        .done(function(data) {
                            alert(data);
                            location.href="/menu";
                        })
                        .fail(function(data) {
                            alert("error/ " + data);
                        });
                    });
                })
            </script>
        </head>
    <body>
        <form method="POST">
            {{csrf_field()}}
            <input type="submit" value="login" id="btnLogin" />
            <input type="button" value="login(api)" id="btnAPI" />
        </form>
    </body>
</html>


menu.blade.php

<html>
    <head>
        <title>menu</title>
        <script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>
        <script>
            $(function() {
                $("#btnAPI").click(function() {
                    $.ajax({
                        type: "POST",
                        url: "/api/user",
                        headers: {
                            'X-CSRF-TOKEN': '{{csrf_token()}}'
                        }
                    })
                    .done(function(data) {
                        alert(data);
                    })
                    .fail(function(data) {
                        alert("error/ " + data);
                    });
                });
            })
        </script>
    </head>
    <body>
        <form method="POST">
            {{csrf_field()}}
            {{Auth::User()->username}}
            <input type="submit" value="logout" />
            <input type="button" value="getAPI" id="btnAPI" />
        </form>
    </body>
</html>

処理詳細

loginページ

  • loginボタン で通常のログイン処理 →menuページ表示
  • login(api)ボタン でajaxにてログイン処理 →doneでmenuに遷移

menuページ

  • ユーザ名表示
  • getAPIボタン でユーザ名取得

問題・解決したいこと

  • ログインページからajaxでログインするときに、ヘッダにtokenを付与しないとエラーになる
  • 外部サイトのためtokenは付与できないので、tokenなしでもアクセスできるようにしたい
  • tokenの条件を外してしまうと、ログイン後のajax通信で識別できなくなる
  • ページ遷移はdoneで「location.href」をするしかない?
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

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

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20878questions

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

  • Ajax

    1117questions

    Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

  • Laravel

    695questions

    LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。