UserController.php 3.71 KB
<?php

namespace App\Http\Controllers\V1;

use App\Http\Controllers\Controller;
use App\Jobs\SendVerificationMessage;
use App\Models\User;
use App\Models\UserProfile;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Jiannei\Response\Laravel\Support\Facades\Response;

class UserController extends Controller
{
    //

    public function login(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'email' => 'required|email|max:255',
            'password' => 'required',
        ]);

        if ($validator->fails()){
            return Response::fail('',500,$validator->errors());
        }

        try{
            $user = User::query()->where('email', $request->email)->where('state', 1)->first();

            if (! $user || ! Hash::check($request->password, $user->password)) {
                Response::errorUnauthorized();
            }

            $token = $user->createToken($request->email)->plainTextToken;

            $response = ['token' => $token];

            return Response::success($response);
        }catch ( \Exception $exception ){
            return Response::fail('账号或密码错误',500,$exception->getMessage());
        }

    }

    public function register(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'email' => 'required|email|unique:users|max:255',
            'password' => 'required',
            'verify_code' => 'required'
        ]);

        if ($validator->fails()){
            return Response::fail('',500,$validator->errors());
        }

        try{
            $redis = Redis::connection();

            if ($redis->get($request->email) !== $request->verify_code){
                return Response::fail('verify code failed',500);
            }
            $data = $validator->validated();
            $data['password'] = bcrypt($data['password']);

            $user = User::query()->create($data);
            UserProfile::query()->create(['user_id' => $user->id]);

            $token = $user->createToken($user->email)->plainTextToken;

            $response = ['token' => $token];

            return Response::success($response);
        }catch ( \Exception $exception ){
            return Response::fail('register failed',500,$exception->getMessage());
        }
    }

    public function verify(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'email' => 'required|email|max:255',
        ]);

        if ($validator->fails()){
            return Response::fail('',500,$validator->errors());
        }

        SendVerificationMessage::dispatch($request->email);

        return Response::success(['message' => 'Has been sent to your email: ' . $request->email],
            'Has been sent to your email: ' . $request->email);
    }

    public function avatar(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'avatar' => 'required|string',
        ]);

        if ($validator->fails()){
            return Response::fail('',500,$validator->errors());
        }

        try{
            $user = Auth::user();

            $user->avatar = $request->avatar;

            $user->save();

        }catch ( \Exception $exception ){
            return Response::fail('',500,$exception->getMessage());
        }

        return Response::success(['avatar' => $user->avatar]);
    }

    public function user()
    {
        $user = Auth::user();
        $user->profile;
        return Response::success($user);
    }
}