我在 Laravel 5.3 中使用委托来管理基于角色的权限,并且自然地为不同的用户类型使用手动/自定义登录。是否可以Auth::attempt()
处理外部表关系?基本上,我想做这样的事情:
if(Auth::attempt(['email' => $request->email, 'password' => $request->password, hasRole('teacher') => true])) {
return redirect()->intended('teacher/dashboard');
}
但我不断收到hasRole()
未定义函数的错误。我已经包含了use Zizaco\Entrust\Traits\EntrustUserTrait;
and 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');
}
}
任何帮助或方向将不胜感激。谢谢。