2017-12-04 4 views
1

私はLaravelにWebとapiルートの両方で同じメソッドを使用しているプロジェクトを持っています。だから、例えば私は、次のを持っているでしょう:Laravel - ウェブルートとAPIルートの両方で使用されるメソッドのユーザーの詳細を取得する

//routes/web.php 
Route::post("/import-results", "[email protected]"); 

//routes/api.php 
Route::post("/import-results/{auto}", "[email protected]"); 

のでかかわらずdoImport()関数はImportContollerに呼び出されますルートの。

インポート・コントローラは、このような機能を持っている(関数内の検証がありますが、私は簡単にするためにそれを取り出しています):

public function doImport($auto = null){ 
    $importData = new DataImport(); 
    $importData->type = $_POST['type']; 
    $importData->data = $_POST['data']; 
    $importData->user = Auth::user()->name; 
    $importData->save(); 

    $data = [ 
     "success" => true, 
     "message" => "Message Here!" 
    ] 

    if($auto){ 
     return json_encode($data); 
    }else{ 
     return view('import-message', $data); 
    } 
} 

あなたは、このメソッドは、インポートされたユーザを識別するためにAuth::user()->name;を使用して見ることができるようにデータ。私がログインしていて普通のウェブルートを使用している場合は問題ありませんが、APIを使用していて、セッションが作成されていない基本認証を使用していて、APIルートが呼び出されてもセッションが持続しないようにしたい場合はどうでしょうか?

APIルートを呼び出すときにユーザー情報を取得するにはどうすればよいですか?

また、ウェブルートの場合、私はLDAPを使用しているのでログインをカスタマイズしましたが、本質的にはAuthenticatesUsers特性を持つクラスで$this->guard()->login($user, false);を実行することによってログインが行われます。

APIルートでもこれを行うことができますが、セッションが作成されますが、要求が終了したらこのセッションをクリアするにはどうすればよいですか?または、より良い方法がありますか?

+0

あなたは認証のためのセッションを必要としません..トークンの認証があります、それでも認証システムを使用することができます – lagbox

+0

@lagbox私はもっと説明するために自分の投稿を更新しました。もし私が '$ this-> guard() - > login($ user、false);'を実行すると、apiルートのためにセッションが作成されます。これは問題ありませんが、要求の最後にそのセッションを終了する必要があります。私はAPIを呼び出すシステムに実装することが不可能であるため、apisにトークン認証を使用したくありません。その基本的なHTTP認証を使用しています。 – SamBremner

+0

authがすでに処理できる... https://laravel.com/docs/5.3/authentication#stateless-http-basic-authentication – lagbox

答えて

0

ページ提出とapiの両方でセッションを有効にする。あなたは

//Web.php 
    Route::post("/import-results", "[email protected]"); 

    Route::post("/api/import-results/{auto}", "[email protected]"); 
はapi.phpに存在する一切のセッションを意味しないapi.phpはステートレスである

web.phpで両方のルートを作る

web.phpでの作業を必要としています。 JWTのようなトークンベースで動作しています。

+0

おそらく、私はこれがうまくいかないかという根本的な誤解を抱いているかもしれませんが、私は何をしようとしているのですか?ldapを使ってログインフォームを使ってユーザーを認証し、http://認証されたAPI呼び出しをAuth :: user ();これは可能ですか? – SamBremner

関連する問題