123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- <?php
- namespace App\Http\Controllers\V1;
- use App\Http\Controllers\Controller;
- use App\Http\Requests\WeappAuthorizationRequest;
- use App\Http\Requests\WeappUserinfoRequest;
- use App\Models\Auth;
- use App\Models\User;
- use App\Models\UserPhoneDetail;
- use App\Repositories\ConfigRepository;
- use App\Repositories\InviteNewUserRepository;
- use App\Repositories\UserRepository;
- use App\Transformers\UserTransformer;
- use Carbon\Carbon;
- use Tymon\JWTAuth\Facades\JWTAuth;
- /**
- * 小程序权限认证模块
- * Class AuthController
- * @package App\Http\Controllers\V1
- */
- class AuthController extends Controller
- {
- protected $jwt;
- protected $userRepository;
- /**
- * Create a new controller instance.
- *
- * @return void
- */
- public function __construct(JWTAuth $jwt, UserRepository $userRepository)
- {
- $this->jwt = $jwt;
- $this->userRepository = $userRepository;
- }
- /**
- * 小程序认证
- * @param WeappAuthorizationRequest $request
- * User: Mead
- */
- public function weappLogin(WeappAuthorizationRequest $request, ConfigRepository $configRepository, InviteNewUserRepository $inviteNewUserRepository)
- {
- try {
- $code = $request->code;
- $appid = $request->appid;
- $invite_user_id = $request->get('invite_user_id') ?? 0;
- $miniProgram = app('wechat.mini_program');
- $data = $miniProgram->auth->session($code);
- if (isset($data['errcode'])) {
- $this->response->errorUnauthorized('code 不正确');
- return '';
- }
- $auth = Auth::where('identifier', $appid)->where('credential', $data['openid'])->first();
- $is_auth = true;
- if (!$auth) {
- //注册用户
- $userInfo = $this->userRepository->getRandomUserInfo();
- $userInfo['register_source'] = User::REGISTER_SOURCE_WEAPP;
- $user = User::create($userInfo);
- //添加邀请注册活动
- if ((int)$invite_user_id != 0) {
- $inviteNewUserRepository->create($invite_user_id, $user->id);
- }
- //注册认证信息
- $attributes['type'] = Auth::TYPE_WEAPP;
- $attributes['identifier'] = $appid;
- $attributes['credential'] = $data['openid'];
- $attributes['user_id'] = $user->id;
- $attributes['is_verified'] = Auth::VERIFIED_OK;
- Auth::create($attributes);
- $is_auth = false;
- } else {
- $user = $this->userRepository->byIdGetModel($auth->user_id);
- }
- $phone_detail = $request->get('phone_detail') ?? '';
- if (!empty($phone_detail)) {
- $detail = json_decode($phone_detail);
- if (!empty($detail)) {
- UserPhoneDetail::Log($detail, $user->id);
- }
- }
- $token = JWTAuth::fromUser($user);
- return $this->response->array([
- 'is_auth' => $is_auth,
- 'token' => 'Bearer ' . $token,
- 'session_key' => $data['session_key'],
- 'exp' => Carbon::now()->addMinute(JWTAuth::factory()->getTTL())->getTimestamp(),
- 'auth_id' => $auth->id,
- 'user' => $is_auth ? $user : [],
- 'android_mini_version' => $configRepository->getMiniAndroidVersion(),
- 'ios_mini_version' => $configRepository->getMiniIosVersion(),
- 'invite_user_id' => $invite_user_id, // 测试
- ]);
- } catch (\Exception $exception) {
- return $this->errorNoValidation($exception->getMessage());
- }
- }
- /**
- * 更新用户基本信息
- * User: Mead
- */
- public function weappUserInfoSync(WeappUserinfoRequest $request)
- {
- try {
- $this->user->fill([
- 'nickname' => $request->get('nickName'),
- 'gender' => $request->get('gender', 0),
- 'country' => $request->get('country', ''),
- 'province' => $request->get('province', ''),
- 'city' => $request->get('city', ''),
- 'avatar' => $request->get('avatarUrl'),
- 'language' => $request->get('language', 'zh_CN'),
- 'register_area_id' => $request->get('area_id', 0),
- 'is_register' => User::REGISTER_OK
- ]);
- $this->user->save();
- return $this->response->item($this->user, UserTransformer::class);
- } catch (\Exception $exception) {
- $this->response->error($exception->getMessage(), 401);
- }
- }
- /**
- * 获取当前登录用户
- * @return \Dingo\Api\Http\Response
- * User: Mead
- */
- public function loginUser()
- {
- try {
- return $this->response->item($this->user, UserTransformer::class);
- } catch (\Exception $exception) {
- return $this->errorNoValidation($exception->getMessage());
- }
- }
- }
|