Как сделать логин в REST
-
- Сообщения: 401
- Зарегистрирован: 2011.11.01, 17:29
Как сделать логин в REST
Мне нужно понять уже в action пользователь аутентифицирован или нет. Мне нужно парсить заголовок и потом делать запрос к БД для того чтобы понять что за пользователь ?
Re: Как сделать логин в REST
А обычная аутентификация так не делает? Конечно нужно спросить, есть ли ваш пользователь.
- proctoleha
- Сообщения: 298
- Зарегистрирован: 2016.07.10, 19:00
Re: Как сделать логин в REST
Нет, не надо ничего парсить и делать запрос к БД. В Yii2 всё уже реализовано. Читаем документацию.evgeniy123 писал(а): ↑2018.07.20, 00:06 Мне нужно понять уже в action пользователь аутентифицирован или нет. Мне нужно парсить заголовок и потом делать запрос к БД для того чтобы понять что за пользователь ?
https://www.yiiframework.com/doc/guide/ ... entication
Если кратко
1. Настраиваем файл конфигурации (роуты, response json, request json, куки, сессии, user identity), например:
Код: Выделить всё
'request' => [
'enableCsrfValidation' => false,
'enableCookieValidation' => false,
'enableCsrfCookie' => false,
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
],
'response' => [
'formatters' => [
'json' => [
'class' => 'yii\web\JsonResponseFormatter',
'prettyPrint' => YII_DEBUG,
'encodeOptions' => JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE,
],
],
],
'user' => [
'identityClass' => 'app\modules\feedback\models\FeedbackUser',
'enableAutoLogin' => false,
'enableSession' => false,
],
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
'' => 'site/index',
'PUT update-setting/<name:[\w\d\-_]+>' => 'feedback/setting/update',
'GET get-setting/<name:[\w\d\-_]+>' => 'feedback/setting/get-value',
'GET get-all-settings' => 'feedback/setting/get-all-settings',
'POST login' => 'feedback/login/index',
...
],
],
Код: Выделить всё
namespace app\controllers;
use yii\filters\AccessControl;
use yii\filters\auth\HttpBasicAuth;
use yii\filters\auth\HttpBearerAuth;
use yii\rest\Controller;
class SiteController extends Controller
{
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['authenticator']['authMethods'] = [
HttpBasicAuth::class,
HttpBearerAuth::class,
];
$behaviors['access'] = [
'class' => AccessControl::class,
'rules' => [
[
'allow' => true,
'roles' => ['@'],
],
],
];
return $behaviors;
}
...
}
Вот за что я не люблю линукс, так это за свои кривые, временами, руки
-
- Сообщения: 401
- Зарегистрирован: 2011.11.01, 17:29
Re: Как сделать логин в REST
обычная так не делает. Она отсекает человека уже на стадии обращения к action. А мне нужно что бы все запросы приходили к action в не зависимости от того у пользователя есть bearer valide или нет. А затем уже в самом action я сам смогу буду делать условия
Код: Выделить всё
if(Yii::$app->user->id) {
....
}
-
- Сообщения: 401
- Зарегистрирован: 2011.11.01, 17:29
Re: Как сделать логин в REST
Вообще ничего не понял хотя всю документацию прочитал. Как сделать чтобы все люди заходили без токена, а потом я бы проверял что может это админ, беря значение Autorisation из header ?
Re: Как сделать логин в REST
то есть вам нужна система контроля прав, на основе ролей. гуглите Yii2 RBACevgeniy123 писал(а): ↑2018.07.20, 11:20 ... отсекает человека уже на стадии обращения к action. А мне нужно что бы все запросы приходили к action в не зависимости от того у пользователя есть bearer valide или нет. А затем уже в самом action я сам смогу буду делать условия
...
а потом я бы проверял что может это админ,
HttpBasicAuth
HttpBearerAuth
отвечают за проверку - "залогинен" пользователь или нет, а не для проверки роли пользователя в системе
Аутентификация, авторизация и идентификация
Идентификация (от латинского identifico — отождествлять): присвоение субъектам и объектам идентификатора и / или сравнение идентификатора с перечнем присвоенных идентификаторов. Например, представление человека по имени отчеству - это идентификация.
Аутентификация (от греческого: αυθεντικός ; реальный или подлинный): подтверждение подлинности чего-либо или кого либо. Например, предъявление паспорта - это подтверждение подлинности заявленного имени отчества.
Авторизация является функцией определения прав доступа к ресурсам и управления этим доступом. Авторизация — это не то же самое что идентификация и аутентификация: идентификация — это называние лицом себя системе; аутентификация — это установление соответствия лица названному им идентификатору; а авторизация — предоставление этому лицу возможностей в соответствие с положенными ему правами или проверка наличия прав при попытке выполнить какое-либо действие. Например, авторизацией являются лицензии на осуществление определённой деятельности.
ну так дайте всем залогиненным(аутентифицированным) пользователям права на доступ, и RBACом, или if(Yii::$app->user->id) - авторизируйте ихevgeniy123 писал(а): ↑2018.07.20, 11:20 я сам смогу буду делать условия
Код: Выделить всё
if(Yii::$app->user->id) {
....
}
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Тем более что окажется что оно вам и не нужно было, странное это.
-
- Сообщения: 401
- Зарегистрирован: 2011.11.01, 17:29
Re: Как сделать логин в REST
Все гораздо проще чем я думал:
Код: Выделить всё
$behaviors['authenticator'] = [
'class' => HttpBearerAuth::class,
'optional'=> ['index'] //___ Here !!
];