使用laravel 5.1我是一个完全的首发。我是一名3到4年的PHP开发人员,在那些我一直在使用Java EE的工作之间,我刚回到PHP环境并找到了一个完整的框架列表。
经过一番研究,并使用一些调查结果,我发现Laravel是最终的。现在我使用Laragon成功安装它并运行我的第一个新应用程序。我学习了一些关于路线如何运作的方法,这很好。
现在我需要使用Sentinel 2.0才能将正确的角色/身份验证应用于我的应用程序,然后添加社交部分。
为此,我需要了解一些事情:
谢谢
答案 0 :(得分:0)
是的,你可以。例如,这是我使用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)和sentinel
进行身份验证 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
}