2016-11-17 1 views
0

laravel에서 로그인을 시도하고 있지만 mssql과 us라는 사용자 테이블을 사용하고 있습니다.Laravel - Auth :: 시도가 작동하지 않습니다. false를 반환하십시오.

public function handle($request, Closure $next) 
{ 
    if(Auth::check()) 
    { 
    return $next($request); 
    } 
    else { 
    return redirect('/login'); 
    } 

} 

지금 난 후 경로/로그인을 만듭니다 :

'providers' => [ 
    //'users' => [ 
    // 'driver' => 'eloquent', 
    // 'model' => App\User::class, 
    //], 

    'users' => [ 
     'driver' => 'database', 
     'table' => 'us', 
    ] 
], 

가 나는 또한 인증라는 미들웨어를 만들 : 설정/auth.php에서

내가 테이블 이름을 변경하려면 공급자를 변경 그리고 지금 나는 컨트롤러없이 모든 길을 가고있다 :

Route::post('/login', function() 
{ 
    echo "login..."; 
    $username = Input::get('username')."</br>"; 
    $password = Input::get('password')."</br>"; 
    $remember = Input::get('remember')."</br>"; 


    $userdata = array(
    'username' => Input::get('username'), 
    'codeApp' => Input::get('password') 
); 
    $rules = array(
     'username' => 'required|exists:us,username', 
     'codeApp' => 'required|exists:us,codeApp' 
); 

    $validator = Validator::make($userdata, $rules); 

    if ($validator->passes()) 
    { 
    $auth = DB::table('us')->where('username', '=', Input::get('username')) 
     ->where('codeApp', '=', Input::get('password'))->get()->first(); 
    // Try to log the user in. 
    if ($auth) 
    { 
     // Redirect to homepage 
     //Auth::login($auth); 
     dd(Auth::attempt(['username' => $username, 'codeApp' => $password], $remember)); 
     if(Auth::attempt(['username' => $username, 'codeApp' => $password], $remember)) 
     { 
      echo "ok"; 
      return Redirect::to('app/groups'); 
     } 

    } 
    } 
    else 
    { 
    echo "error"; 
    return Redirect::to('login')->withErrors($validator); 
    } 
}); 

내가 correc $ auth는 올바른 사용자를 얻지 만 dd(Auth::attempt(['username' => $username, 'codeApp' => $password], $remember));은 false를 리턴하고 나는 이유를 모른다.

어떻게 해결할 수 있습니까?

감사

답변

1

문제는 당신이 손상된으로 정식하려고 때문에 결과에 ."</br>"의 추가 연결을 만든 때문에 Route::post('/login', function() {} 당신이 변수

$username = Input::get('username')."</br>"; 
$password = Input::get('password')."</br>"; 
$remember = Input::get('remember')."</br>"; 

에 대한 잘못된 값을 할당한다는 것입니다 신임장. 해결하려면 단순히 연결을 제거하십시오. 이미 해당 공급자 사용자를 확인하신 후 간단하기 때문에

$auth = DB::table('us')->where('username', '=', Input::get('username')) 
     ->where('codeApp', '=', Input::get('password'))->get()->first(); 
    // Try to log the user in. 
    if ($auth) 
    {} 

및 appCode 사용 존재합니다 -

그리고 한 가지 더 당신처럼 당신은 DB에 별도의 쿼리를 만든 다음 결과를 확인 할 필요가 없습니다 유효성 검사 규칙 유효성 검사는 단순히 Auth::attempt(...)을하고 작업이 완료 그래서 후
$rules = array(
     'username' => 'required|exists:us,username', 
     'codeApp' => 'required|exists:us,codeApp' 
); 

.

코드를 더 잘 만들려면 Input :: get ('...') 호출을 해당 변수로 바꿉니다.

그리고 하나 더 조언 - 디버그 응용 프로그램의 흐름에하지 echo을 - Laravel의 로그 파일에 작성하는 \Log::debug('Whatever you want to debug')를 사용하면 tail -f ./storage/logs/laravel.log 콘솔 명령을 추적 할 수 있습니다

관련 문제