我有下表
id email password role
1 someemail password admin
2 someemail password guest
访客是可以访问前端的少数特权部分的人(例如:评论博客帖子等)
访客通常使用oauth通过facebook注册。我已阻止来自管理员登录的访客,如下所示
if (Auth::attempt(array('email'=>Input::get('email'), 'password'=>Input::get('password'),'role'=>'admin'))) {
但问题是,当用户从Facebook登录时,会话被共享并且也可以访问管理员。
facebook登录代码如下
//$result hold facebook information
$user->firstname = $result['first_name'];
$user->lastname = $result['last_name'];
$user->email = $result['email'];
$user->password ='sample';
$user->role='facebook';
//check user with same email is already there
$usr = User::where('email', '=', $result['email'])->count();
if($usr==0)
$user->save();
//automatically login the registered user
$user = User::where('email', '=', $user->email)->where('role', '=', 'facebook')->first();
Auth::login($user);
现在在每个控制器中我都在构造函数
上调用了以下函数public function __construct() {
$this->beforeFilter('auth');
}
这不足以停止来宾用户的会话分享..任何帮助将不胜感激
答案 0 :(得分:2)
在app/filters.php
中创建一个新过滤器,用于检查用户是否为管理员。
Route::filter('auth.admin', function()
{
if (Auth::guest())
return Redirect::guest('/');
if (Auth::user()->role != 'admin')
return Redirect::to('/');
});
现在在管理员控制器中调用新过滤器
public function __construct()
{
$this->beforeFilter('auth.admin');
}