Login.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\service\DingtalkService;
  4. use app\common\model\User;
  5. use Firebase\JWT\JWT;
  6. use hg\apidoc\annotation as Apidoc;
  7. /**
  8. * @Apidoc\Title("登录")
  9. * @Apidoc\Group("api")
  10. * @Apidoc\Sort("1")
  11. */
  12. class Login extends Base
  13. {
  14. public function initialize()
  15. {
  16. parent::initialize();
  17. }
  18. /**
  19. * 登录
  20. *
  21. * @Apidoc\Method("POST")
  22. * @Apidoc\Param("code", type="string",require=true, desc="免登授权码")
  23. * @Apidoc\Returned("data", type="string", desc="用户token")
  24. */
  25. public function login(){
  26. $code = input('code');
  27. if(!$code){
  28. $this->error('授权码错误');
  29. }
  30. $resp = DingtalkService::get_user_info($code);
  31. if($resp->errcode != 0){
  32. $this->error($resp->errcode.' '.$resp->errmsg);
  33. }
  34. $user = User::where('userid',$resp->result->userid)->value('id');
  35. if(!$user){
  36. $this->error('不是内部人员');
  37. }
  38. $token = $this->create_jwt($user);
  39. $this->success('登录成功',$token);
  40. }
  41. /**
  42. * 获取token
  43. *
  44. * @Apidoc\Method("POST")
  45. * @Apidoc\Query("uid", type="string",require=true, desc="用户ID")
  46. * @Apidoc\Returned("data", type="string", desc="用户token")
  47. */
  48. public function get_token(){
  49. $uid = input('uid');
  50. $token = $this->create_jwt($uid);
  51. $this->success('获取成功',$token);
  52. }
  53. //token加密
  54. public function create_jwt($uid)
  55. {
  56. $key = md5(config('app.jwt')); //jwt的签发密钥,验证token的时候需要用到
  57. $time = time(); //签发时间
  58. $expire = $time + config('app.jwt_time'); //过期时间
  59. $token = array(
  60. "uid" => $uid,
  61. "iss" => "https://zain.com",//签发组织
  62. "aud" => "https://zain.com", //签发作者
  63. "iat" => $time,
  64. "nbf" => $time,
  65. "exp" => $expire
  66. );
  67. $jwt = JWT::encode($token, $key);
  68. return $jwt;
  69. }
  70. }