我正在使用Laravel 4开发一个应用程序,我需要有两种身份验证类型。
类型1:用户 - 系统的管理员/后台工作人员。
类型2:客户 - 如果经过身份验证,则可以执行某些操作(如购买服务)的网站访问者。
使用用户名/密码对Type 1用户进行身份验证,以便在Laravel身份验证模型中很好地适应。
如果客户愿意,将使用OAuth样式(使用Google / Facebook)或手动身份验证对Type 2客户进行身份验证。我不想将两者混合在一起,因此如果您作为客户进行身份验证,我不希望身份验证过滤器认为您可以访问管理页面,反之亦然。
这两种类型将拥有自己的表(分别是用户和客户)。有没有办法以某种方式同时运行不同的Auth模型?或者我必须为客户写自己的东西?这种情况下推荐的方法是什么?
答案 0 :(得分:0)
如果我理解你的问题,这应该让你走上正确的道路。
您只需在每个表中设置一个account_level指示符,并将管理路由包装在一个过滤器中,该过滤器会检查用户的account_level是否正确。例如:
在routes.php中
Route::group(array('before' => 'admin_only'), function() {
Route::get('my-admin-route', 'AdminController@adminAction');
});
在filters.php中
Route::filter('admin_only', function() {
if (!Auth::check() || Auth::user()->account_level !== Config::get('constants.ADMIN_ACCOUNT_LEVEL') {
return App::abort(404);
}
});
为了记录系统中没有用户名和密码的用户,您需要单独处理OAuth连接,一旦拥有有效用户,您可以使用Auth::login($user)
方法获取用户回到通常的应用程序流程。