2017-10-04 5 views
0

의 상태 1과 3을 가진 활성 사용자를 리디렉션하면, 사용자 테이블에 3 개의 값을 갖는 상태 필드가 있습니다. 값은 0 = 비활성 상태, 1 = 비활성 상태, 2 = 지불 됨입니다. 로그인 후 사용자가 상태 1 또는 3을 가지고 있는지 확인하려고합니다. 상태 1 또는 3에 속하면 대시 보드로 리디렉션해야합니다. 기타는입니다. 아래는 AuthController의 getcredential 메소드입니다.내 Laravel 5.2 프로젝트에서 laravel 5.2

protected function getCredentials($request) { 

return $request->only($this->loginUsername(), 'password') + ['status' => 1]; 
} 

여기서 두 가지 상태를 모두 확인할 수 있습니다. 미리 감사드립니다.

답변

0

자격 증명 값은 정적 값일 필요는 없지만 사용자 공급자가 자격 증명을 확인하는 데 사용하는 Closure을 제공 할 수도 있습니다.

다음은 트릭을해야 다음

protected function getCredentials($request) { 
    return $request->only($this->loginUsername(), 'password') + ['status' => function($query) { 
    $query->whereIn('status', [1, 3]); 
    }]; 
} 
+0

그러나 이것을 사용하면 사용자가 email = 'ddd'이고 status = (select * from status ....)와 같은 select *와 같을 것입니다. 여기서 상태와 전자 메일은 모두 사용자 테이블 자체에 속합니다. – Rose

+0

왜 상태 테이블을 검색합니까? 사용자 제공 업체가 사용자 데이터를 가져 오는 데 사용하는 테이블을 계속 사용합니다. 단일 값을 확인하는 대신 '(1, 3)의 상태'를 수행합니다. –

1

나는이 문제에 대한 해결책을 발견합니다. 나는 getCredential 메소드를 그대로 유지했다.

protected function getCredentials($request) { 
    return $request->only($this->loginUsername(), 'password') + 
    ['status' => 1]; 
} 

그리고 AuthController의 로그인 기능에 다음 코드를 작성했습니다.

if($user->status == 3){ 
if(Auth::attempt(['email' => $request['email'], 'password' => $request['password'], 'status' => 3,])) 
        { 

         $fallback_url = '/dashboard'; 
         $intended_url = 
           Redirect::intended($fallback_url)->getTargetUrl(); 
         return response()->json(['auth' => true, 'intended' => $intended_url]); 

        } 
    } 

이제 상태 = 1 및 상태 = 3 인 사용자는 대시 보드에 로그인 할 수 있습니다.