저는 Mojolicious 응용 프로그램과 인증 용 브리지를 가지고 있습니다. 이것은 나의 시나리오이다 :
나는 값을 전달함으로써 질의를하는 데이터베이스에서 표준 에러 응답을 가지고있다. 예를 들어, 자세한 에러 응답을 가진 404를 반환한다. 데이터베이스는 오류에 해당하는 공통 세부 사항을 가지며 IP 및 사용자 이름과 같은 기타 사용자 특정 세부 사항은 컨트롤러에서 가져옵니다. 오류 응답이 어떻게 구성되는지에 관해서는 this link을 참조하십시오. 컨트롤러의 인스턴스를 가져오고 필요한 응답을 생성하는 오류 코드가있는 도우미가 있습니다. 나는 오류 응답을 포함하는 테이블의 결과 집합을 통해 db를 쿼리하기 위해 컨트롤러 개체를 사용합니다. 컨트롤러를 통해 응답을 생성하는 데 필요한 사용자 별 세부 정보도 얻을 수 있습니다. 그런 다음 응답이 만들어 져서 컨트롤러로 보내지고 Json으로 반환됩니다.
내 문제는 로그 아웃 중이므로 세션을 무효화하는 $self->session(expires => 1)
으로 설정합니다. 다시 로그 아웃하려고 시도 할 때 컨트롤러를 사용하여 도우미에 액세스하여 오류 응답을 작성하고이를 클라이언트에 보냅니다. 이제 URI에 액세스하려는 시도는 다음 확인을 통해 첫 번째 시도에서 무의미합니다.세션이 Mojolicious에서 만료되지 않습니다.
unless($self->session('user')) {
my $res = Controller::Helper->error_res($self, 403);
$self->render_json($res, status => $res->{httpstatuscode});
return;
}
이 검사는 처음으로 작동하지만, 내가 다시 (여러 번) 자원에 액세스하려고 할 때,이 검사가 실패하고 자원이 로그인없이 액세스 할 수 있습니다. 쿠키를 보면 새로운 쿠키가 만들어집니다. 내가 여기서 어디로 잘못 가고 있니? 그런 문제를 해결하는 가장 좋은 방법은 무엇일까요? 도우미 기능은 res
가 특정 오류를 식별 할 데이터베이스이며 ID이
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;
}
것 같습니다.
그래서 컨트롤러의 참조가 도우미에서 계속 사용할 수 있습니까? 내가 도우미에서 $c
을 undef하면 도움이되지 않습니다.
편집 1 : 여기에 몇 가지 요점이 누락되어 있으며 올바른 방법입니까?
편집 2 : 나는 로그 아웃시 사용자를 무효화합니다. 사용자가 다시 로그 아웃하려고하면 오류에 대한 추가 정보가있는 오류를 반환합니다. 그러나 오류에 대한 추가 정보를 만드는 동안 사용자 정보가없는 새 세션이 만들어집니다. 다음을 수행하면 이런 일이 발생하지 않습니다.
unless($self->session('user')) {
$self->render_json("message:User has not logged in", status => 403);
return;
}
모든 요청에 대해 세션 쿠키가 무효화되는 것을 알고 있습니까? 아마도 사용자 상호 작용 흐름을 설명해야하며 정확하고 잘못된 동작이 무엇인지 이해할 수 없습니다. –
@JoelBerger 질문에 대한 답변을 편집했습니다.이 질문을 이해하는 데 도움이되기를 바랍니다. –
편집 (2)이 예상대로 작동하는 것 같습니다. 사용자가 로그 아웃하면 새로운 세션 쿠키에 'user' 키가 없습니다. 내 CMS [Galileo] (https://github.com/jberger/Galileo/blob/master/lib/Galileo.pm#L111) –