AuthorizeController.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace oauth2\controllers;
  3. use Yii;
  4. use oauth2\components\Response;
  5. use common\helpers\ResultHelper;
  6. use oauth2\repository\AuthCodeRepository;
  7. use oauth2\repository\RefreshTokenRepository;
  8. use League\OAuth2\Server\Grant\AuthCodeGrant;
  9. use GuzzleHttp\Psr7\ServerRequest;
  10. /**
  11. * 授权码模式(即先登录获取code,再获取token)
  12. *
  13. * Class AuthorizeController
  14. * @package frontend\modules\open\controllers
  15. * @author jianyan74 <751393839@qq.com>
  16. */
  17. class AuthorizeController extends OnAuthController
  18. {
  19. public $modelClass = '';
  20. /**
  21. * 不用进行登录验证的方法
  22. * 例如: ['index', 'update', 'create', 'view', 'delete']
  23. * 默认全部需要验证
  24. *
  25. * @var array
  26. */
  27. protected $authOptional = ['create'];
  28. /**
  29. * @throws \Exception
  30. */
  31. public function init()
  32. {
  33. parent::init();
  34. // 初始化存储库
  35. $authCodeRepository = new AuthCodeRepository(); // Interface: AuthCodeRepositoryInterface
  36. $refreshTokenRepository = new RefreshTokenRepository(); // Interface: RefreshTokenRepositoryInterface
  37. // 授权码授权类型初始化
  38. $grant = new AuthCodeGrant(
  39. $authCodeRepository,
  40. $refreshTokenRepository,
  41. new \DateInterval(Yii::$app->params['user.codeExpire']) // 设置授权码过期时间为10分钟
  42. );
  43. $grant->setRefreshTokenTTL(new \DateInterval(Yii::$app->params['user.refreshTokenExpire'])); // 设置刷新令牌过期时间1个月
  44. Yii::$app->services->oauth2Server->set($grant); // 写入服务
  45. }
  46. /**
  47. * @return mixed|\yii\db\ActiveRecord
  48. */
  49. public function actionCreate()
  50. {
  51. $server = Yii::$app->services->oauth2Server->get();
  52. $response = new Response();
  53. $request = ServerRequest::fromGlobals();
  54. try {
  55. // 这里只需要这一行就可以,具体的判断在 Repositories 中
  56. $server->respondToAccessTokenRequest($request, $response);
  57. } catch (\League\OAuth2\Server\Exception\OAuthServerException $exception) {
  58. return ResultHelper::json(422, $exception->getMessage());
  59. } catch (\Exception $exception) {
  60. return ResultHelper::json(422, $exception->getMessage());
  61. }
  62. }
  63. /**
  64. * 权限验证
  65. *
  66. * @param string $action 当前的方法
  67. * @param null $model 当前的模型类
  68. * @param array $params $_GET变量
  69. * @throws \yii\web\BadRequestHttpException
  70. */
  71. public function checkAccess($action, $model = null, $params = [])
  72. {
  73. // 方法名称
  74. if (in_array($action, ['index', 'view', 'update', 'delete'])) {
  75. throw new \yii\web\BadRequestHttpException('您的权限不足,如需要请联系管理员');
  76. }
  77. }
  78. }
粤ICP备19079148号