ada*_*m78 4 authentication laravel laravel-5 laravel-5.1
如何在Laravel 5.1中验证多种类型的用户,例如Jobseeker,Recruiter,Admin等.
有些人建议使用单个用户表来存储密码和电子邮件,创建用于存储用户特定信息的配置文件表(jobseeker_profile,recruiter_profile),并使用角色来区分不同类型的用户(即具有角色和role_user)表.
这一切都很好但是如果不同类型的用户具有不同的注册和登录表单会怎样.如何自定义默认的auth控制器,以显示正确的视图?
所以,如果我有以下路线:
// Jobseeker Authentication routes...
Route::get('auth/login', 'Auth\AuthController@getLogin');
Route::post('auth/login', 'Auth\AuthController@postLogin');
Route::get('auth/logout', 'Auth\AuthController@getLogout');
// Jobseeker Registration routes...
Route::get('auth/register', 'Auth\AuthController@getRegister');
Route::post('auth/register', 'Auth\AuthController@postRegister');
// Recruiter Authentication routes...
Route::get('recruiter/auth/login', 'Auth\AuthController@getLogin');
Route::post('recruiter/auth/login', 'Auth\AuthController@postLogin');
Route::get('recruiter/auth/logout', 'Auth\AuthController@getLogout');
// Recruiter Registration routes...
Route::get('recruiter/auth/register', 'Auth\AuthController@getRegister');
Route::post('recruiter/auth/register', 'Auth\AuthController@postRegister');
Run Code Online (Sandbox Code Playgroud)
这是开箱即用的默认auth控制器:
class AuthController extends Controller
{
use AuthenticatesAndRegistersUsers;
public function __construct()
{
$this->middleware('guest', ['except' => 'getLogout']);
}
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
}
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
}
Run Code Online (Sandbox Code Playgroud)
默认开箱即用的auth控制器使用的特征:
trait AuthenticatesUsers
{
use RedirectsUsers;
public function getLogin()
{
return view('auth.login');
}
public function postLogin(Request $request)
{
$this->validate($request, [
'email' => 'required|email', 'password' => 'required',
]);
$credentials = $this->getCredentials($request);
if (Auth::attempt($credentials, $request->has('remember'))) {
return redirect()->intended($this->redirectPath());
}
return redirect($this->loginPath())
->withInput($request->only('email', 'remember'))
->withErrors([
'email' => $this->getFailedLoginMessage(),
]);
}
public function loginPath()
{
return property_exists($this, 'loginPath') ? $this->loginPath : '/auth/login';
}
}
trait RegistersUsers
{
use RedirectsUsers;
public function getRegister()
{
return view('auth.register');
}
public function postRegister(Request $request)
{
$validator = $this->validator($request->all());
if ($validator->fails()) {
$this->throwValidationException(
$request, $validator
);
}
Auth::login($this->create($request->all()));
return redirect($this->redirectPath());
}
}
Run Code Online (Sandbox Code Playgroud)
我确信这是许多Web应用程序的一个非常常见的要求,但我找不到任何有用的Laravel特定实现教程.由于一些奇怪的原因,所有教程都只关注开箱即用的实现.
任何有关上述的帮助将非常感激.
这不是直接解决您问题的方法,而是解决您的问题的替代方法.
不是为不同的组创建不同的用户名和密码,而是进行具有角色的中央身份验证.它称为用户和角色.
您可以定义具有不同角色的组,并且每个角色都具有对相应区域的特定访问权限.
关于注册过程,您可以使用相同的控制器创建两个不同的视图,并且对于每个视图,您可以创建一个隐藏字段以指示它是求职者组还是招聘人员组.
两者都会收到两封不同的确认电子邮件,他们应该填写其余的个人资料信息,比如招聘人员应该把公司名称和求职者放在他的名字等等.他们可能有两个不同的表格用于个人资料信息,但仍然使用相同的登录系统.
通过向中间件添加条件和正确的路由,如果求职者尝试访问招聘人员区域,即使求职者登录系统,求职者也将无法访问该区域或相反的方式.
由于Laravel 5.1已构建用户登录系统,因此您几乎没有选择,可以构建自己的角色或使用第三方.
我建议你建立自己的代码,这样你就可以控制你的代码,并可以随着时间的推移进一步开发它.可能需要半天时间让它运行并了解它是如何工作的,但值得用正确的方法花费时间来代替你的问题,或使用第三方也很好,有很多你周围的包可以搜索.我个人使用了Entrust(https://github.com/Zizaco/entrust),这是为您的项目提供角色和权限的简单方法.
这里还有一个由Jeffrey Way在Laracast开发的视频链接,它为Laravel 4从零开始构建用户和角色系统.但由于你有用户部分,只需按照角色部分进行小修改,你就会有一个角色系统到你的Laravel 5.1,我试过了它,它的工作原理.
关于您在评论中的问题,当您关注视频时,您将理解这个概念.
链接到视频:https://laracasts.com/lessons/users-and-roles
您可能需要创建帐户才能观看视频,大多数视频都是免费的.
好的做法 说明你想要实现的目标总是一个很好的做法,让事情变得更容易,我刚刚为你的项目做了一个例子,但这只是学习的一个例子:
我鼓励你阅读一些关于角色的主题,在这里你也会发现一些灵感来自Laravel的第三方acl系统,可能会有更多文章,但这里有一些:
阅读:
https ://laracasts.com/discuss/channels/laravel/which-package-is-best-for-roles-permissions/
? page = 2 https://laracasts.com/discuss/channels/general-discussion/ laravel-5-user-groups-management
https://laracasts.com/discuss/channels/general-discussion/roles-and-permissions-in-laravel-5
编辑
重要说明
Laravel 5.1已经引入了授权,我还没有在线找到很多文档,但是值得花一些时间学习它:
http://laravel.com/docs/5.1/authorization#policies
新的更新
有一些很棒的视频解决方案可以满足您的要求,请点击此处的ACL部分
https://laracasts.com/series/whats-new-in-laravel-5-1
这也许非常有趣:https: //laracasts.com/lessons/email-verification-in-laravel
这将为您提供完整自己开发的解决方案.
简短回答:将用户类型添加到具有特定编号的用户表中。
长话短说,博士回答。
长答案:
php artisan migrate:rollback.
$table->integer("user_type")->default(0);
这里我认为用户类型零只是一个简单的JobSeeker。
| 归档时间: |
|
| 查看次数: |
4793 次 |
| 最近记录: |