PasswordController.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace oauth2\controllers;
  3. use Yii;
  4. use oauth2\repository\UserRepository;
  5. use oauth2\repository\RefreshTokenRepository;
  6. use common\helpers\ResultHelper;
  7. use GuzzleHttp\Psr7\ServerRequest;
  8. use oauth2\components\Response;
  9. /**
  10. * 密码模式(将用户名,密码传过去,直接获取token)
  11. *
  12. * Class PasswordController
  13. * @package oauth2\controllers
  14. * @author jianyan74 <751393839@qq.com>
  15. */
  16. class PasswordController extends OnAuthController
  17. {
  18. public $modelClass = '';
  19. /**
  20. * 不用进行登录验证的方法
  21. * 例如: ['index', 'update', 'create', 'view', 'delete']
  22. * 默认全部需要验证
  23. *
  24. * @var array
  25. */
  26. protected $authOptional = ['create'];
  27. /**
  28. * @throws \Exception
  29. */
  30. public function init()
  31. {
  32. parent::init();
  33. $userRepository = new UserRepository(); // instance of UserRepositoryInterface
  34. $refreshTokenRepository = new RefreshTokenRepository(); // instance of RefreshTokenRepositoryInterface
  35. $grant = new \League\OAuth2\Server\Grant\PasswordGrant(
  36. $userRepository,
  37. $refreshTokenRepository
  38. );
  39. $grant->setRefreshTokenTTL(new \DateInterval(Yii::$app->params['user.refreshTokenExpire'])); // refresh tokens will expire after 1 month
  40. Yii::$app->services->oauth2Server->set($grant); // 写入服务
  41. }
  42. /**
  43. * @return mixed
  44. */
  45. public function actionCreate()
  46. {
  47. /* @var \League\OAuth2\Server\AuthorizationServer $server */
  48. $server = Yii::$app->services->oauth2Server->get();
  49. $response = new Response();
  50. $request = ServerRequest::fromGlobals();
  51. // Try to respond to the request
  52. try {
  53. $server->respondToAccessTokenRequest($request, $response);
  54. } catch (\League\OAuth2\Server\Exception\OAuthServerException $exception) {
  55. return ResultHelper::json(422, $exception->getMessage());
  56. } catch (\Exception $exception) {
  57. return ResultHelper::json(422, $exception->getMessage());
  58. }
  59. }
  60. /**
  61. * 权限验证
  62. *
  63. * @param string $action 当前的方法
  64. * @param null $model 当前的模型类
  65. * @param array $params $_GET变量
  66. * @throws \yii\web\BadRequestHttpException
  67. */
  68. public function checkAccess($action, $model = null, $params = [])
  69. {
  70. // 方法名称
  71. if (in_array($action, ['index', 'view', 'update', 'delete'])) {
  72. throw new \yii\web\BadRequestHttpException('您的权限不足,如需要请联系管理员');
  73. }
  74. }
  75. }
粤ICP备19079148号