123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- <?php
- namespace App\Http\Controllers\Api\V1;
- use App\Exceptions\ApiException;
- use App\Http\Controllers\Api\Controller;
- use App\Models\Course;
- use App\Models\User;
- use App\Http\Requests\Api\UserRequest;
- use App\Models\UserCourses;
- use App\Services\User\UserService;
- use App\Transformers\UserTransformer;
- use Dingo\Api\Http\Request;
- use Illuminate\Support\Facades\Cache;
- /**
- * 注册相关
- * Created on 2020/8/14 11:23
- * Create by Wpeishi
- */
- class UsersController extends Controller
- {
- /**
- * 注册
- * @param UserRequest $request
- * @return \Dingo\Api\Http\Response
- */
- public function store(UserRequest $request)
- {
- $verifyData = self::verificationCode($request);
- if ($request->password != $request->repassword) {
- throw new ApiException('两次输入密码不一致');
- }
- $user = User::create([
- 'phone' => $verifyData['phone'],
- 'password' => bcrypt($request->password),
- 'user_type' => $request->user_type ?? 0,
- ]);
- // 清除验证码缓存
- Cache::forget($request->verification_key);
- if (!$user) {
- throw new ApiException('注册失败,请重试');
- }
- return $this->response->item($user, new UserTransformer())
- ->setMeta([
- 'access_token' => \Auth::guard('api')->fromUser($user),
- 'token_type' => 'Bearer',
- 'expires_in' => \Auth::guard('api')->factory()->getTTL() * 60
- ])
- ->setStatusCode(201);
- }
- /**
- * 获取用户信息
- * @return array
- * @return \Dingo\Api\Http\Response
- */
- public function me()
- {
- $user = $this->auth->user();
- // $user_data = UserService::getUserInfo($user->id);
- $UserCourses = UserCourses::query()->where(['user_id' => $user->id])->orderByDesc('id')->with('course')->get();
- $course_data = [];
- foreach ($UserCourses as $k => $v) {
- $course_data[] = [
- 'subject_name' => $v->course->name,
- 'bar' => $v->bar
- ];
- }
- $data = [
- 'id' => $user->id,
- 'nick_name' => $user->nick_name,
- 'phone' => $user->phone,
- 'avatar_url' => $user->avatar_url,
- 'school' => $user->school,
- 'make_num' => $user->make_num,
- 'user_type' => $user->user_type,
- 'carbon_emission' => $user->carbon_emission,
- 'course_data' => $course_data
- ];
- return apiJson($data);
- }
- /**
- * 验证码路由校验 校验
- * @param Request $request
- * @return array
- *
- */
- public function isVerification(Request $request)
- {
- self::verificationCode($request);
- return apiJsonMsg('验证码正确!');
- }
- /**
- * 忘记密码
- * @param Request $request
- * @return mixed
- */
- public function forgetPassword(Request $request)
- {
- $verifyData = self::verificationCode($request);
- $query = User::query()->where(['phone' => $verifyData['phone']])->first();
- if (!$query) {
- throw new ApiException('用户不存在');
- }
- if ($request->password != $request->repassword) {
- throw new ApiException('两次输入密码不一致');
- }
- $user = $query->update([
- 'password' => bcrypt($request->password),
- ]);
- if (!$user) {
- throw new ApiException('修改失败,请重试');
- }
- // 清除验证码缓存
- Cache::forget($request->verification_key);
- return apiJsonMsg('修改成功请前往登录!', 200, $verifyData['phone']);
- }
- /**
- * 校验验证码是否正确
- * @param $request
- * @return mixed
- */
- public static function verificationCode($request)
- {
- $verifyData = Cache::get($request->verification_key);
- if (!$verifyData) {
- throw new ApiException('验证码已失效');
- }
- if (!hash_equals($verifyData['code'], $request->verification_code)) {
- throw new ApiException('验证码错误');
- }
- return $verifyData;
- }
- }
|