パスポートの動作原理が間違っていることを理解するまで、私はこの問題に直面していました。
Passportは、そのユーザーの同意を得たユーザーのデータをクライアントアプリケーションに許可することです(これはOAuth2の仕組みです)。だから、クライアントアプリケーションが最終的にそのユーザーのデータへのアクセスを許可するアクセストークンを取得しようとするとき、そのユーザーの同意が必要です。 Webミドルウェアは、そのユーザーの同意を得るためのレイヤーとして機能します。同意に署名するには、まずユーザーがログインする必要があります。そうしないと、実際のユーザーであるという証拠はありません。
あなたのアプリが「Googleでログイン」機能を実装しようとしているシナリオを考えてみましょう。ログインページにリダイレクトした後、ユーザーのログイン情報をGoogleアカウントにリダイレクトし、同意した後、認証コードを使ってアプリにリダイレクトされるボタンをGoogleにリダイレクトします。これはまさにそのようなものです。ここでGoogleはあなたが構築しているアプリで、他のアプリはクライアントアプリです。
実用的な実装を行う場合でもこれを理解するにはまだ最良の方法です。 laravelで新しいアプリケーションを作成し、このコードをroutes/web.phpファイルに入れてください。
Route::get('/redirect', function() {
$query = http_build_query([
'client_id' => 'YOUR APP'S CLIENT ID',
'redirect_uri' => 'THE CALLBACK YOU GAVE DURING CREATING THE CLIENT',
'response_type' => 'code',
'scope' => '',
]);
return redirect('http://your-app.com/oauth/authorize?'.$query);
});
/redirect
ルートで新しいアプリにアクセスしてください。メインアプリも実行していることを確認してください。
出典
2016-12-06 16:17:30
Jem
残念ながら、それはまったく私を助けませんでした。ミドルウェアを既存のミドルウェアのリストに追加するだけでした。だから、ミドルウェアを "web、auth"から "cors"に変更するのではなく、 "cors、web、auth"を得ました。 あなたを認証するはずのものについては、それほど遠慮しているようです。 –