2015-12-29 3 views
1

Я использовал этот код для аутентифицировать имя пользователя из внешнего источника без использования базы данных, но laravel 5.2 не сохраняет аутентификацию и запрашивает внешний источник каждый раз.Laravel 5.2 - Auth :: login не сохраняется при использовании нового App User

class Authenticate 
{ 
    public function handle($request, Closure $next, $guard = null) 
     { 
      if (Auth::guard($guard)->guest()) { 
       if ($request->ajax()) { 
        return response('Unauthorized.', 401); 
       } else { 
        $username = getFromExternalSource(); 
        if($username==null){ redirect()->guest('auth/login'); } 
        $user = new \App\User(['username'=>'admin']); 
        Auth::login($user); 
       } 
      } 

      return $next($request); 
     } 
} 

Но когда я изменяю AUTH :: логин с помощью $ пользовательской модели получить из нее базы данных работы, я не знаю, почему:

$userDB = \App\User::where('username','=','admin')->first(); 
Auth::login($userDB); 

Мой маршрут (например, я хочу, чтобы получить доступ к http://myApp/api)

Route::group(['middleware' => ['web']], function() { 
    Route::group(['middleware' => 'auth'], function() { 
     Route::get('api/', '[email protected]'); 
    }); 
    Route::group(['middleware' => ['csrf']], function() { 
     Route::controllers([ 
      'auth' => 'Auth\AuthController', 
      'password' => 'Auth\PasswordController' 
     ]); 
    }); 

}); 

ответ

1

Насколько мне известно для метода аутентификации по умолчанию, вам необходимо передать модель, которая существует в базе данных. В вашем примере вы создали только объект и присвоили ему свойство username.

Если вам необходимо проверить подлинность выбранного пользователя, вы должны использовать:

Auth::loginUsingId($id); 

(где вместо $id вы должны передать идентификатор пользователя, которого вы хотите проверить подлинность - в вашем случае идентификатор пользователя с именем admin)

+0

Спасибо. Я только уточнил свой вопрос, но я хочу аутентифицировать и разрешить использование внешнего источника (например, OpenAM), но я не хочу хранить эти идентификаторы в базе данных приложений. – o0omycomputero0o

+0

Хорошо, вы изменили значение по умолчанию 'auth.php'? –

+0

@ o0omycomputero0o Вы пытались изменить '$ user = new \ App \ User (['username' => 'admin']);' в '$ user = new \ App \ User (['username' => 'admin' , 'id' => 'admin']); ' –