2017-09-26 1 views
0

사용자가 로그 아웃 한 시간을 확인하여 한 페이지에서 로그 아웃 할 때 모든 페이지의 로그인 페이지로 이동하도록하는 방법을 모색 중입니다. 이를 확인하기 위해, 나는 다음과 같은 루프와 서버 전송 이벤트를 사용하고 있습니다 : 나는 그러나났습니다Laravel : 다시로드하지 않고 인증 확인

// check for new notifications every 2 seconds 
$poller->loop(function ($every) use ($poller) { 
    $poller->write("check", Auth::check()); 
    if (!Auth::check()) { 
     $poller->throwError("out", "You are no longer logged in!"); 
    } else { 
     $poller->pingNotifications(); 
    } 
}, 2); 

그 laravel가 단지 이상한 페이지의로드에 Auth::check()을 평가하는 것 같다. 다른 탭의 페이지에서 로그 아웃 한 경우에도 ping "check"가 변경되지 않으므로이 관찰을 수행했습니다.

이 문제를 해결할 방법이 있습니까? 아니면 그냥 laravel의 본질입니까? 그렇다면 AJAX를 사용하는 것 외에 인증 확인을 생각할 때 어떤 생각이 떠오르는 지 알아보십시오. 당신이 걸릴 수

+0

그래서 세션이 만료되면 로그인으로 리디렉션 하시겠습니까? – ggg

+0

맞습니다. @ggg – Shawn31313

답변

0

그냥 방향은 ... laravel 저장소로 세션 데이터베이스 드라이버를 사용할 때 가장 쉬운 당신을 위해 거기에 사용자 ID ... 각 세션을 감안할 때

는 데이터베이스의 레코드입니다 ... 당신이 경우 user_id = 현재 사용자 ID가 귀하의/로그 아웃 경로에있는 모든 세션을 삭제하면 모든 세션이 만료됩니다 ...

+0

그냥 Auth와 마찬가지로 Session이 반복 될 때 변경되지 않습니다. 이 두 가지 모두 페이지를로드해야하는 것 같습니다. – Shawn31313

+0

루프를 돌릴 때 변경되지 않습니다. 무엇이 변경 될까요? 요청에 따라 세션이 설정되고 다음 요청까지는 아무 것도 변경되지 않습니다 ... 그래서 로그 아웃하면 세션과 로그인 한 다른 세션이 종료됩니다. 폴링은 아무것도 변경되지 않으므로 아무 것도하지 않습니다 ... 로그 아웃 경로에서 캐치해야합니다 ... – Serge

1

아약스를 사용하지 않으면 (여전히 다소 번거롭지 만) 사용자를 리디렉션하는 유일한 방법은 로그 아웃 할 때 로그 아웃 스크립트 (세션 데이터를 덤프합니다). 여기서 인증 된 사용자를 필요로하는 모든 라우트를 Auth 미들웨어를 통해 라우트하고 로그인되지 않은 경우 로그인 페이지로 연결됩니다. Laravel은 라우트 파일에서 라우트 '그룹'을 정의하거나 컨트롤러의 경우에 필요한 특정 방법에 따라 미들웨어를 구체적으로 호출 할 수 있기 때문에 유용합니다.

+0

한 탭의 로그 아웃 스크립트에서 다른 탭의 페이지를 자동으로 리디렉션 할 수 있습니까? – Shawn31313

관련 문제