Я использую entrust для управления разрешениями на основе ролей в Laravel 5.3 и, естественно, с использованием ручных/пользовательских логинов для разных типов пользователей. Возможно ли для Auth::attempt()
обработать внешние отношения таблицы? В принципе, я хочу сделать что-то вроде этого:Может ли Laravel Auth :: попытка() обрабатывать отношения?
if(Auth::attempt(['email' => $request->email, 'password' => $request->password, hasRole('teacher') => true])) {
return redirect()->intended('teacher/dashboard');
}
Но я получаю сообщение об ошибке, что hasRole()
является неопределенной функцией. Я включил use Zizaco\Entrust\Traits\EntrustUserTrait;
и use EntrustUserTrait;
, которые, как я думал, предоставят мне доступ к функции, но, видимо, нет.
Я ценю тот факт, что hasRole()
- это метод для объектов пользователя, и во время проверки у меня нет объекта пользователя, но я не могу выполнить проверку роли после попытки, потому что тогда пользователь уже был зарегистрирован, и если роль была неправильной, мне нужно было бы их вывести, поскольку их учетные данные верны, но не для роли; который кажется медленным, а не прагматичным.
Как мне с этим справиться? Есть ли альтернатива Auth::attempt
, которую я могу использовать, чтобы не входить в систему пользователя, но проверить, существует ли пользователь с указанным входом, а затем запустить проверку роли, а затем использовать другую функцию для запуска аутентифицированного сеанса?
Если полезен мой LoginController здесь:
<?php
namespace App\Http\Controllers\Teacher;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
use Validator;
use Zizaco\Entrust\Traits\EntrustUserTrait;
class LoginController extends Controller {
use EntrustUserTrait;
public function showLoginForm() {
return view('teacher/login');
}
public function authenticate(Request $request) {
Validator::make($request->all(), [
'email' => 'required|email',
'password' => 'required',
])->validate();
if(Auth::attempt(['email' => $request->email, 'password' => $request->password, hasRole('teacher') => true])) {
return redirect()->intended('teacher/dashboard');
}
return redirect('admin/login')->with('invalid', 'Invalid username or password');
}
}
Любая помощь или направление будет высоко ценится. Благодарю.
Это будет регистрировать кого-то, кто не обязательно учитель, но может пройти проверку подлинности на другой логин портала –