【问题标题】:Laravel 5 and Sentinel 2Laravel 5 和哨兵 2
【发布时间】:2015-10-17 00:21:30
【问题描述】:

我是一个使用 laravel 5.1 的完整入门者。在 3 到 4 年之前,我是一名 PHP 开发人员,在这期间我一直在使用 Java EE,我刚刚回到 PHP 环境并找到了一个完整的新框架列表。

经过一些研究,并使用一些调查结果,我发现 Laravel 是最终的。现在我使用 Laragon 成功安装了它并运行了我的第一个新应用程序。我稍微了解了路线的工作原理,没关系。

现在我需要使用 Sentinel 2.0 来将正确的角色/身份验证应用到我的应用程序,然后添加社交部分。

所以要做到这一点,我需要知道一些事情:

  • 除了删除控制器 Auth 文件夹和 routes.php 中的路由之外,还有什么方法可以“完全”摆脱 Auth 组件?
  • 是否有任何教程(我找不到)告诉如何真正包含哨兵意味着如何创建一个包含所有需要的简单视图(控制器、变量、路由 ....)

谢谢

【问题讨论】:

    标签: laravel-5.1 cartalyst-sentinel


    【解决方案1】:

    是的,你可以。例如,这是我使用 JWT 和 Sentinel 进行 API 休息的代码。您可以使用 Sentinel 为您的数据库播种:

    创建角色

    EXA 角色示例

        $role = \Sentinel::getRoleRepository()->createModel()->create([
            'name' => 'Example',
            'slug' => 'EXA',
        ]);
        $role->permissions = [
            'servicio_dash' => true,
            'servicio_widget' => true,
        ];
        $role->save();
    

    用户角色 USR

        $role = \Sentinel::getRoleRepository()->createModel()->create([
            'name' => 'User',
            'slug' => 'USR',
        ]);
        $role->permissions = [
            'servicio_dash' => true,
            'servicio_widget' =>false,
        ];
        $role->save();
    

    创建 50 个用户并指定 EXA 角色(使用 faker)

        $usr_role = \Sentinel::findRoleBySlug('EXA');
    
        factory(App\User::class, 50)->make()->each(function ($u) use ($usr_role) {
            \Sentinel::registerAndActivate($u['attributes']);
        });
    

    附赠曲目:工厂示例

    $factory->define(App\User::class, function (Faker\Generator $faker) {
    return [
        'email' => $faker->safeEmail,
        'password' => 'p4ssw0rd',
        'first_name' =>  $faker->firstName,
        'last_name' => $faker->lastName,
        'recycle' => false,
        'phone' => $faker->phoneNumber,
        'alt_email' => $faker->email
    ];
    

    });

    只有一个用户

    $yo = factory(App\User::class)->make(['email' => 'jpaniorte@openmailbox.org']);
        \Sentinel::registerAndActivate($yo['attributes']);
    
    
        $jperez = User::where('email', 'jpaniorte@openmailbox.org')->firstOrFail();
        $epa_role->users()->attach($jperez);
    

    为 API REST 验证控制器

      public function authenticateCredentials(Request $request)
    {
        $credentials = $request->only('email', 'password');
    
        $user = \Sentinel::authenticate($credentials);
        return response()->json($user);
    }
    

    使用令牌(使用 JWT)和哨兵进行身份验证

     public function authenticate(Request $request)
    {
    
        // grab credentials from the request
        $credentials = $request->only('email', 'password');
        try {
            // attempt to verify the credentials and create a token for the user
            if (!$token = JWTAuth::attempt($credentials)) {
            return response()->json(['error' => 'invalid_credentials'], 401);
        }
        } catch (JWTException $e) {
            // something went wrong whilst attempting to encode the token
            return response()->json(['error' => 'could_not_create_token'], 500);
        }
        // all good so return the token
        return response()->json(compact('token'));
    }
    

    注意:为此,您需要使用自定义身份验证提供程序配置 JWT 选项,您可以找到这个here

    在任何控制器中

    public function hasPermission($type)
    {
        //$sentinel = \Sentinel::findById(\JWTAuth::parseToken()->authenticate()->id); //->this is for a token
    
        $sentinel = \Sentinel::findById(1); //if you now the id
    
    
        if($sentinel->hasAccess([$type]))
            return response()->json(true, 200);
        //yout custom handle for noAccess here
    }
    

    【讨论】:

      猜你喜欢
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多