我正在使用Laravel 4开发一个应用程序,其中我需要有2种身份验证类型。
类型1:用户-是系统的管理员/后台工作人员。
类型2:客户-即网站的访问者,如果他们经过身份验证,他们可以做某些事情(如购买服务)。
Type 1用户使用用户名/密码进行身份验证,因此这非常适合Laravel身份验证模型。
类型2客户将使用OAuth风格(使用Google/Facebook)或手动身份验证(如果客户愿意)进行身份验证。我不想把两者混合在一起,所以如果你作为客户进行身份验证,我不希望身份验证过滤器认为你可以访问管理页面,反之亦然。
这两种类型将有自己的表(分别为Users和Customers)。有没有办法让不同的Auth模型以某种方式同时运行?还是我必须为客户写自己的东西?在这种情况下,建议采用什么方法?
如果我正确理解你的问题,这应该会让你走上正确的道路。
您可以简单地在每个表中设置一个account_level指示符,并将您的管理路由封装在一个过滤器中,该过滤器检查用户的account_level是否正确。例如:
在routes.php 中
Route::group(array('before' => 'admin_only'), function() {
Route::get('my-admin-route', 'AdminController@adminAction');
});
在过滤器中.pp
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)
方法让用户回到您通常的应用程序流中。
http://laravel.com/docs/4.2/security#manually