【问题标题】:hooking beforeFilter auth -laravel 4挂钩 beforeFilter auth -laravel 4
【发布时间】:2014-08-06 05:50:33
【问题描述】:

我有下表

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

这不足以阻止来宾用户的会话共享。任何帮助将不胜感激

【问题讨论】:

    标签: php facebook authentication laravel oauth


    【解决方案1】:

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

    【讨论】:

    • 我在 app/route.php 中创建了一个新过滤器,用于检查用户是否是管理员。它有效.. 谢谢
    猜你喜欢
    • 2014-10-18
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    相关资源
    最近更新 更多