ホームページ  >  記事  >  バックエンド開発  >  フロントエンドとバックエンドが分離されたフレームワークで、認証されていないジャンプを行うにはどうすればよいでしょうか?

フロントエンドとバックエンドが分離されたフレームワークで、認証されていないジャンプを行うにはどうすればよいでしょうか?

WBOY
WBOYオリジナル
2016-10-22 00:14:262159ブラウズ

フロントエンドとバックエンドの分離のフレームワークでは、通常、バックエンドのリクエストは nginx 設定を通じてバックエンドに対応するディレクトリに送信され、その後、フロントエンドのリクエストは、フロントエンド。ここで、たまたま認証ストリップ関数を見つけました。実装する必要があるのは、フロントエンド要求であるかバックエンド要求であるかに関係なく、送信されるすべての要求が最初にログインがあるかどうかを判断し、次にジャンプするということです。ログインがない場合はログインホームページへ。
1.通常、認証判定はバックエンドで行われ、ページジャンプはフロントエンドで行われますが、この 2 つのステップをどのように組み合わせることができるでしょうか。

  1. フロントエンドとバックエンドが分離されていない場合、通常、フレームワークの初期化中にフックが設定され、ログインがあるかどうかを判断し、ログインがない場合はジャンプします。

  2. 分離後の解決策としては、バックエンドは引き続きリクエストごとに認証判定を行い、ジャンプせずに返すだけにする必要があると思います。 次に、フロントエンド フレームワーク モジュールが初期化されるときに、最初に認証インターフェイスを要求します。認証が失敗した場合は、ログイン ページにジャンプします。

経験豊富な友人の皆様、別居シナリオでこの認証を行う方法についてアドバイスをお願いします。

返信内容:

フロントエンドとバックエンドの分離のフレームワークでは、通常、バックエンドのリクエストは nginx 設定を通じてバックエンドに対応するディレクトリに送信され、その後、フロントエンドのリクエストは、フロントエンド。ここで、たまたま認証ストリップ関数を見つけました。実装する必要があるのは、フロントエンド要求であるかバックエンド要求であるかに関係なく、送信されるすべての要求が最初にログインがあるかどうかを判断し、次にジャンプするということです。ログインがない場合はログインホームページへ。
1.通常、認証判定はバックエンドで行われ、ページジャンプはフロントエンドで行われますが、この 2 つのステップをどのように組み合わせることができるでしょうか。

  1. フロントエンドとバックエンドが分離されていない場合、通常、フレームワークの初期化中にフックが設定され、ログインがあるかどうかを判断し、ログインがない場合はジャンプします。

  2. 分離後の解決策としては、バックエンドは引き続きリクエストごとに認証判定を行い、ジャンプせずに返すだけにする必要があると思います。 次に、フロントエンド フレームワーク モジュールが初期化されるときに、最初に認証インターフェイスを要求します。認証が失敗した場合は、ログイン ページにジャンプします。

経験豊富な友人の皆様、別居シナリオでこの認証を行う方法についてアドバイスをお願いします。

フロントエンドの分離は通常json送信を使用します。Jsonであればこれが可能です。
検証が成功した場合の戻り値: {code: "Success", data: "取得するデータ", info: null},
検証が失敗した場合の戻り値: {code: "Failed", data: null, info: "アクセスなし権利" "}
コード値を受け取った後、ジャンプするかどうかはフロントエンドが判断します。

私が実装した方法は次のとおりです:

フロントエンドにログインした後、バックエンドによって生成された結果を保存します token(后端可以用JWTredismysql保存,前端保存在localstoragecookie)。

フロントエンドへの各リクエストには 授权(登录)接口,判断token是否有效(包含是否过期),如果无效返回403,以及错误信息。前端使用一个Service基类(例如AdminService catch 403的异常,如果捕获到,路由到登录页面),或者写一个全局的过滤器,捕获403 が必要です。

フロントエンドとバックエンドの分離とは、フロントエンドでログイン ステータスをキャッシュし、このステータス コードをリクエストごとに持ち込むことを意味し、バックグラウンドで有効期限が切れているかどうかを判断します。それだけです

たとえば、バックグラウンド プロジェクトの場合、ログインに成功した後にのみシステムに入ることができることは誰もが知っています。では、プロセス全体でどのように認証を行うのでしょうか?

  1. バックエンドは、すべての受信リクエストをフィルタリングして、ユーザーがログインしているかどうかを確認します。ログインしていない場合は、無視し続けます

  2. フロントエンドの場合、すべてのルートジャンプも検証する必要があります。たとえば、特定のページを開く前に、検証のためにバックエンドに ajax を送信します。ログイン ページが表示されない場合は、ログイン ページにジャンプします。

  3. ユーザーがログインに失敗した場合、ブラウザは Cookie を書き込みません。ユーザーの Cookie はブラウザに保存され、ユーザーのセッションはサーバーに保存されます。ブラウザの Cookie がセッションキーです

当社は最近、フロントエンドとバックエンドを完全に分離しました。具体的な方法は非常にシンプルで、例えばログイン認証が必要なページがあった場合、フロントエンドがバックエンドに直接リクエストを行います。バックエンドはログインするかどうかを決定し、ログインしている場合はステータス statussuccess,外加数据啥的。如果没有登录直接返回一个固定的状态,就是statusfail_401 を返します。

ページに取得できるデータがない場合は、ページに入るときに、インターフェースをリクエストし、通過しない場合は、現在のページに残ります。直接ジャンプします。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。