인증/권한 구현을 위해 guide을 따라했으며 로그인 할 수 있습니다. 가이드의 내용과는 다른 주요 차이점이 있습니다. isActive
속성 대신 내 데이터베이스에 상태 테이블이 있습니다.Symfony2 사용자 정의 상태 기반의 사용자 로그인 거부
가이드에 언급 된 isActive
속성 대신 상태 테이블의 값을 기반으로 로그인을 거부/허용하는 방법에 대한 손실이 있습니다.
가이드에 나와있는대로 작동하기 때문에 어떤 코드를 게시해야할지 모르겠지만 Symfony 보안 시스템은 내가 볼 수없는 모든 인증 작업을 처리합니다.
올바른 방향으로 나를 가리키더라도 나는 감사 할 것입니다.
편집 :
이public function isAccountNonExpired()
{
$status = $this->getTblStatus()->getStatustext();
switch ($status){
case "expired":
return false;
default:
return true;
}
}
public function isAccountNonLocked()
{
$status = $this->getTblStatus()->getStatustext();
switch ($status){
case "locked":
return false;
case "suspended":
return false;
case "registered":
return false;
default:
return true;
}
}
public function isCredentialsNonExpired()
{
return $this->pwdexpired;
}
public function isEnabled()
{
$status = $this->getTblStatus()->getStatustext();
if($status != 'active')
return false
else
return true;
}
그때가 다음 질문은 내가 던져 예외를 어떻게 처리하나요 경우 : AdvancedUserInterface 기능을 구현하기 위해이 코드를 내놓았다 ChadSikorra의 조언을 사용
사용자가 상태 중 하나를 가지고있을 때?
내가 지금까지 가지고있는 것을 바탕으로 loginAction의 오류를 잡아 내면이 문제를 해결할 수 있다고 생각합니다. 어떻게 해야할지 모르겠지만 오류를 확인하는 것이지만 계속 파고 갈 것입니다.
/**
* @Route("/Login", name="wx_exchange_login")
* @Template("WXExchangeBundle:User:login.html.twig")
* User login - Open to public
* Authenticates users to the system
*/
public function loginAction(Request $request)
{
$session = $request->getSession();
if ($this->get('security.context')->isGranted('IS_AUTHENTICATED_REMEMBERED'))
{
// redirect authenticated users to homepage
return $this->redirect($this->generateUrl('wx_exchange_default_index'));
}
// get the login error if there is one
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $request->attributes->get(
SecurityContext::AUTHENTICATION_ERROR
);
} else {
$error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
$session->remove(SecurityContext::AUTHENTICATION_ERROR);
}
if($error instanceof LockedException)
{
}
return $this->render(
'WXExchangeBundle:User:login.html.twig',
array(
// last username entered by the user
'last_username' => $session->get(SecurityContext::LAST_USERNAME),
'error' => $error,
)
);
}
는 이제 예외의 종류를 확인 할 수 있어요,하지만 난 올바른 위치로 리디렉션 할 수 있도록 나는 특정 상태를 확인하는 방법에 대한 손실에 있어요. 이것은 퍼즐의 마지막 부분입니다.
나는 이것이 내 상태 테이블에서 내가 원하는 상태라고 생각합니다. 그러나 활성 상태, 확인되지 않은 상태, 금지 상태 등의 상태가 있습니다. 사용자 로그인을 거부하고 다른 페이지 기반으로 리디렉션하고 싶습니다. 상태에. 사용자가 등록 후 해당 메시지가있는 페이지와 등록 이메일을 다시 보내기위한 버튼을 확인하지 않은 경우의 예입니다. 금지 된 사용자는 금지 된 메시지 등을 얻을 것입니다. –
BTW 나는 alredy가 수행 한 매핑을 가지고 있습니다. 아직 isEnabled 함수가 완료되지 않았습니다. –
계정 상태에 따라 사용자 지정 작업을 수행하는 데 도움이되는 몇 가지 추가 예제와 정보를 추가했습니다. – ChadSikorra