在过滤器之前挂钩-laravel 4

时间:2014-06-16 11:52:50

标签: php facebook authentication laravel oauth

我有下表

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

这不足以停止来宾用户的会话分享..任何帮助将不胜感激

1 个答案:

答案 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');
}