>백엔드 개발 >PHP 튜토리얼 >yii2 재설정 인증 확인에 대한 자세한 설명

yii2 재설정 인증 확인에 대한 자세한 설명

php中世界最好的语言
php中世界最好的语言원래의
2018-04-11 11:09:481710검색

이번에는 yii2 재설정 인증에 대한 자세한 설명을 가져왔습니다. yii2 재설정 인증 인증에 대한 주의사항은 무엇인가요?

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

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

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

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

비즈니스 분석

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

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

이 글에서는 전체 버전 설명을 예로 들어

사용자 로그인을 사용하여 사용자의 개인 정보를 얻습니다.

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

준비

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

위 준비 사항 중 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() 
   ] 
 ] );
}

如此一来,那岂不是所有访问user的操作都需要认证了?那不行,客户端第一个访问login操作的时候哪来的token,yii\filters\auth\QueryParamAuth对外提供一个属性,用于过滤不需要验证的action。我们将UserController的behaviors方法稍作修改

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;],
     ];

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:



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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.