yii2 재설정 승인 확인

不言
풀어 주다: 2023-03-24 11:56:02
원래의
1618명이 탐색했습니다.

편안한 스타일 API란 무엇인가요? 우리는 그 개념과 기본 동작을 소개하기 위해 이전에 큰 글을 쓴 적이 있습니다.

이제 다 썼으니 오늘은 뭐라고 말씀하실 건가요?

이 글은 주로 실제 시나리오에서의 API 배포를 위해 작성되었습니다.

오늘은 그 당시 API에서 겪었던 인증 확인 문제에 대해 이야기하겠습니다! 독점 작품입니다. 이 작품을 읽고 도움이 되셨다면 좋아요를 눌러주세요.

비즈니스 분석

먼저 전체 논리를 이해해 봅시다

1. 사용자가 클라이언트에서 로그인 양식을 작성합니다
2. 사용자가 양식을 제출하고 클라이언트가 로그인 인터페이스를 요청합니다
3. 사용자의 계정과 비밀번호를 확인하고 유효한 토큰을 클라이언트에 반환합니다
4. 클라이언트는 사용자의 토큰을 가져와 쿠키와 같은 클라이언트에 저장합니다
5. 사용자의 개인 정보를 얻기 위한 인터페이스와 같은 검증
6. 서버는 검증에 성공하면 클라이언트가 요구하는 정보를 반환합니다. 검증에 실패하면 사용자는 로그인해야 합니다. 다시

이 글에서는 상세하고 완전한 설명을 제공하기 위해 사용자 로그인을 사용하여 사용자의 개인 정보를 수집합니다.

위 내용이 이 글의 핵심입니다. 아직 너무 흥분하거나 긴장하지 마시고, 분석 후 차근차근 세부적으로 진행하겠습니다.

준비

1. API 애플리케이션이 있어야 합니다.
2. 클라이언트의 경우 시뮬레이션을 위해 Postman을 사용할 예정입니다. Google 브라우저에 Postman이 설치되어 있지 않으면 먼저 다운로드하세요.
3. 테이블에는 api_token 필드가 있어야 합니다. 그렇지 않은 경우 먼저 추가하고 필드가 충분히 긴지 확인하세요
4. API 애플리케이션은 라우팅 미화를 활성화하고 먼저 게시 유형 로그인 작업과 get 유형 signup-test를 구성했습니다. Operation
5. User Component의 Session Session이 종료되었습니다

위 준비사항 중 4번째, 5번째 항목에 대해서는 이해하기 쉽도록 코드를 올려보겠습니다

'components'=> [
 'user'=> [ 
  'identityClass'=>'common\models\User',
  'enableAutoLogin'=> true,
  'enableSession'=> false,
 ],
 'urlManager'=> [
  'enablePrettyUrl'=> true,
  'showScriptName'=> false,
  'enableStrictParsing'=> true,
  'rules'=> [
   [
    'class'=>'yii\rest\UrlRule',
    'controller'=> ['v1/user'],
    'extraPatterns'=> [
     'POST login'=>'login',
     'GET signup-test'=>'signup-test',
    ]
   ],
  ]
 ],
 // ......
],
로그인 후 복사

signup-test 동작을 원활하게 하기 위해 추후 테스트 사용자를 추가하겠습니다. 로그인 작업. 다른 유형의 작업은 나중에 추가해야 합니다.

인증 클래스 선택

apimodulesv1controllersUserController에 설정한 모델 클래스는 commonmodelsUser 클래스를 가리킵니다. 핵심 사항을 설명하기 위해 필요에 따라 별도로 다시 작성하지 않습니다. 필요한 경우 User 클래스를 apimodels에 복사합니다. 별도로.

사용자 권한을 확인하기 위해 yiifiltersauthQueryParamAuth를 예로 듭니다

useyii\filters\auth\QueryParamAuth;
  
publicfunctionbehaviors() 
{
 returnArrayHelper::merge (parent::behaviors(), [ 
   'authenticator'=> [ 
    'class'=> QueryParamAuth::className() 
   ] 
 ] );
}
로그인 후 복사

이 경우 해당 사용자에 액세스하는 모든 작업에 인증이 필요하다는 뜻 아닌가요? 작동하지 않습니다. 클라이언트가 처음 로그인 작업에 액세스할 때 토큰은 어디에서 제공됩니까? YiifiltersauthQueryParamAuth는 확인이 필요하지 않은 필터링 작업을 위한 외부 속성을 제공합니다. UserController

의 동작 방법을 약간 수정했습니다.
publicfunctionbehaviors() 
{
 returnArrayHelper::merge (parent::behaviors(), [ 
   'authenticator'=> [ 
    'class'=> QueryParamAuth::className(),
    'optional'=> [
     'login',
     'signup-test'
    ],
   ] 
 ] );
}
로그인 후 복사

这样login操作就无需权限验证即可访问了。

添加测试用户

为了避免让客户端登录失败,我们先写一个简单的方法,往user表里面插入两条数据,便于接下来的校验。

UserController增加signupTest操作,注意此方法不属于讲解范围之内,我们仅用于方便测试。

usecommon\models\User;
/**
 * 添加测试用户
 */
publicfunctionactionSignupTest ()
{
 $user=newUser();
 $user->generateAuthKey();
 $user->setPassword('123456');
 $user->username ='111';
 $user->email ='111@111.com';
 $user->save(false);
  
 return[
  'code'=> 0
 ];
}
로그인 후 복사

如上,我们添加了一个username是111,密码是123456的用户

登录操作

假设用户在客户端输入用户名和密码进行登录,服务端login操作其实很简单,大部分的业务逻辑处理都在api\models\loginForm上,来先看看login的实现

useapi\models\LoginForm;
  
/**
 * 登录
 */
publicfunctionactionLogin ()
{
 $model=newLoginForm;
 $model->setAttributes(Yii::$app->request->post());
 if($user=$model->login()) {
  if($userinstanceofIdentityInterface) {
   return$user->api_token;
  }else{
   return$user->errors;
  }
 }else{
  return$model->errors;
 }
}
로그인 후 복사

登录成功后这里给客户端返回了用户的token,再来看看登录的具体逻辑的实现

新建api\models\LoginForm.PHP

<?php
namespaceapi\models;
  
useYii;
useyii\base\Model;
usecommon\models\User;
  
/**
 * Login form
 */
classLoginFormextendsModel
{
 public$username;
 public$password;
  
 private$_user;
  
 constGET_API_TOKEN =&#39;generate_api_token&#39;;
  
 publicfunctioninit ()
 {
  parent::init();
  $this->on(self::GET_API_TOKEN, [$this,&#39;onGenerateApiToken&#39;]);
 }
  
  
 /**
  * @inheritdoc
  * 对客户端表单数据进行验证的rule
  */
 publicfunctionrules()
 {
  return[
   [[&#39;username&#39;,&#39;password&#39;],&#39;required&#39;],
   [&#39;password&#39;,&#39;validatePassword&#39;],
  ];
로그인 후 복사

相关推荐:

Yii2.0 PHP使用Sphinx

Yii2 的控制台命令

위 내용은 yii2 재설정 승인 확인의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿