Mojolicious アプリケーションと認証用のブリッジがあります。これが私のシナリオです。
データベースに一連の標準エラー応答があり、値を渡してクエリを実行します。たとえば、詳細なエラー応答で 404 を返します。データベースには、エラーに対応する共通の詳細が含まれますが、IP やユーザー名などの他のユーザー固有の詳細はコントローラーから取得されます。よろしければこちらのリンクをご覧くださいエラー応答がどのように構築されるかについて。コントローラーのインスタンスとエラー コードを取得して必要な応答を生成するヘルパーがあります。コントローラー オブジェクトを使用して、エラー応答を含むテーブルの結果セットを介してデータベースにクエリを実行します。コントローラーを介して、応答を作成するために必要なユーザー固有の詳細も取得します。次に、応答が作成され、Json として返されるコントローラーに送り返されます。
私の問題はログアウト時$self->session(expires => 1)
です。セッションを無効にする設定をしました。もう一度ログアウトしようとすると、コントローラーを使用してヘルパー ビルドにアクセスし、エラー応答をクライアントに送信します。現在、URI のいずれかにアクセスしようとしても、次のチェックによって最初の試行は無効になります。
unless($self->session('user')) {
my $res = Controller::Helper->error_res($self, 403);
$self->render_json($res, status => $res->{httpstatuscode});
return;
}
このチェックは初めて機能しますが、リソースに再度 (何度でも) アクセスしようとすると、このチェックは失敗し、ログインせずにリソースにアクセスします。Cookie を見ると、新しい Cookie が作成されます。ここでどこが間違っていますか?そして、そのような問題を処理する最善の方法は何でしょうか? ヘルパー関数は次のようになります
error_res{
my($self,$c,$res) = @_;
my @arref = $c->db->resultset('Errorcode')->select_row($res);
my $ref=$arref[0];
$ref->{user}=$c->session->{user}->{name};
$ref->{request}=$c->req->method."".join("\\",$c->req->url->path);
$ref->{time}=scalar localtime();
return $ref;
}
特定のエラーを識別するデータベース内の場所res
と id。
それで、ヘルパーでまだ利用可能なコントローラーの参照と関係がありますか? ヘルパーで定義を解除$c
すると、役に立ちません。
編集1:ここでいくつかの点が欠けていますか?これは正しい方法ですか?
編集 2:ログアウト時にユーザーを無効にします。ユーザーが再度ログアウトしようとすると、エラーに関する追加情報を含むエラーが返されます。ただし、エラーに関する追加情報の作成中に、ユーザー情報なしで新しいセッションが作成されます。これは、次のようにすると発生しません
unless($self->session('user')) {
$self->render_json("message:User has not logged in", status => 403);
return;
}