Было бы целесообразно, если я делаю аутентификацию в промежуточном программном обеспечении и добавляю некоторые данные в \Illuminate\Http\Request $request
объект и используя эти данные в контроллере, вводя \Illuminate\Http\Request $request
в метод контроллера?
Причина в том, что приложению необходимо выполнить вызов базы данных, чтобы выяснить, действительны ли учетные данные, и если это так, оно возвращает что-то вроде первичного ключа, который я использую в последующих операциях с БД.
На данный момент все сделано в контроллере. Если бы я использовал отдельное промежуточное программное обеспечение для аутентификации, могу ли я привязать данные, которые нужны моему контроллеру, к объекту запроса, если проверка промежуточного программного обеспечения прошла? если да, то как мне это сделать?
Вдохновение — Expressjs способ связывания и передачи данных по запросу через стек промежуточного программного обеспечения / маршрутов.
Я не понимаю — почему вы просто не используете аутентификатор Laravel?
Ты говоришь:
Причина в том, что приложению необходимо выполнить вызов базы данных, чтобы выяснить, действительны ли учетные данные, и если это так, оно возвращает что-то вроде первичного ключа, который я использую в последующих операциях с БД.
И это именно то, что делает Аутентификатор Laravel?
Тогда в вашем контроллере вы можете просто сделать
`auth()->user()` // gives you the user record
`auth()->id()` // user_id from the DB
`auth()->user()->name` // gives you the `name` column off the record. You can change it to anything.
Редактировать: Между тем — вы все еще можете использовать пакет Laravel Authenticator, используя устаревшую систему для аутентификации. В вашем промежуточном программном обеспечении вы можете сделать что-то вроде этого:
if (doLegacyCheckHere()) {
Auth::loginUsingId(1);
}
Это означает, что вы можете выполнить свою проверку через граф neo4j db — и если он вернется true
что пользователь аутентифицирован правильно — тогда вы просто регистрируете их в системе Laravel самостоятельно.
Да, это, вероятно, хороший способ сделать это, так как встроенная система аутентификации Laravel работает так же: вы можете получить доступ к зарегистрированному пользователю через $request::user()
, Увидеть http://laravel.com/docs/5.0/authentication#retrieving-the-authenticated-user
Это нормально для проверки подлинности в промежуточном программном обеспечении. В моем приложении мы используем ту же функциональность, чтобы проверить, отправляет ли пользователь правильный код доступа для доступа к методам API. Даже Laravel сам обрабатывает защищенные маршруты с помощью промежуточного программного обеспечения Authenticate.
Проблема в том, что нет серебряной пули о том, как и где хранить дополнительные данные.
Один из способов — сохранить это в сеансе пользователя.
Второй заключается в использовании Illuminate\Foundation\Application
сам класс. Вы можете вставить его в свое промежуточное ПО __constructor()
и использовать его для сохранения ваших данных. Application
класс расширяет класс Container, который реализует интерфейс ArrayAccess, который позволяет вам получить доступ к его свойствам, как к массиву. Это позволяет вам не только получать переменные из приложения, но и хранить их. Не самый лучший способ, хотя самый простой.
public function __construct(\Illuminate\Foundation\Application $app)
{
$app['_foo'] = 'bar';
}
Таких хаков больше, но они самые простые.