gpt4 book ai didi

Laravel 5.1 多重认证

转载 作者:行者123 更新时间:2023-12-04 18:04:45 24 4
gpt4 key购买 nike

如何在 Laravel 5.1 中对多种类型的用户进行身份验证,例如求职者、招聘人员、管理员等。

你们中的一些人建议使用单个用户表来仅存储密码和电子邮件,创建配置文件表来存储用户特定信息(jobseeker_profile、recruiter_profile)并使用角色来区分不同类型的用户(即具有角色和角色用户) table 。

这一切都很好,但是如果不同类型的用户有不同的注册和登录表单,那又会怎样。如何自定义默认的 auth Controller 以显示正确的 View ?

所以如果我有以下路线:

// 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');

这是开箱即用的默认身份验证 Controller :
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']),
]);
}
}

默认开箱即用的身份验证 Controller 使用的特征:
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());
}
}

我确信这是许多 Web 应用程序的一个非常普遍的要求,但我找不到任何关于 Laravel 特定实现的有用教程。由于某些奇怪的原因,所有教程都只关注开箱即用的实现。

对上述任何帮助将不胜感激。

最佳答案

这不是直接解决您的问题,而是解决您的问题的替代方法。

不要为不同的组创建不同的用户名和密码,而是进行具有角色的中央身份验证。它叫 用户和角色 .

您可以定义具有不同角色的组,每个角色对各自的区域都有特定的访问权限。

关于注册过程,您可以使用相同的 Controller 创建两个不同的 View ,并且对于每个 View ,您可以创建一个隐藏字段以指示它是求职者组还是招聘人员组。

两者都会收到两封不同的确认电子邮件,他们应该填写其余的个人资料信息,例如招聘人员应该输入公司名称,求职者应该输入他的姓名等。他们可能有两个不同的个人资料表,但仍然使用相同的登录系统。

通过向中间件添加条件和正确的路由,如果求职者试图访问招聘人员区域,即使求职者已登录系统,求职者也将无法访问该区域或以相反的方式访问该区域。

由于 Laravel 5.1 有 build in user login system ,所以你几乎没有选择,建立自己的角色或使用 3rd 方。

我建议您构建自己的代码,这样您就可以控制自己的代码,并可以随时间进一步开发它。您可能需要半天时间才能运行它并了解其工作原理,但值得花时间使用正确的方法,而不是您在问题 中采用的方式。或 使用 3rd party 也可以,周围有很多包可以搜索。我个人使用过 Entrust ( https://github.com/Zizaco/entrust ),它是为您的项目提供角色和权限的简单而好方法。

这里还有一个由 Jeffrey Way 在 Laracast 开发的视频的链接,它从头开始为 Laravel 4 构建用户和角色系统。但是由于您有用户部分,只需遵循角色部分,稍作修改,您将拥有 Laravel 的角色系统5.1,我试过了,有效。

关于评论中的问题,当您观看视频时,您将了解这个概念。

视频链接:https://laracasts.com/lessons/users-and-roles

您可能需要创建帐户才能观看视频,大多数视频都是免费的。

良好做法
说明您想要实现的目标使事情变得更容易,这始终也是一个很好的做法,我刚刚为您的项目制作了一个示例,但这只是学习的示例:

enter image description here

我鼓励你阅读一些关于角色的主题,在这里你也会找到一些对 Laravel 3rd 方 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

这将为您提供一个完整的自己开发的解决方案。

关于Laravel 5.1 多重认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32294832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com