kphcdr 1 year ago
parent
commit
5a791e18ef

+ 48 - 0
app/Base/Validation/Phone.php

@@ -0,0 +1,48 @@
+<?php
+
+namespace App\Base\Validation;
+
+use Illuminate\Contracts\Validation\Rule;
+
+class Phone implements Rule
+{
+    /**
+     * Create a new rule instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        //
+    }
+
+    /**
+     * Determine if the validation rule passes.
+     *
+     * @param string $attribute
+     * @param mixed  $value
+     * @return bool
+     */
+    public function passes($attribute, $value)
+    {
+        if (strlen($value) == 11) {
+            $mobileRegex = '/^1[3-9]\d{9}$/';
+            if (preg_match($mobileRegex, $value)) {
+                return true;
+            } else {
+                return false;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Get the validation error message.
+     *
+     * @return string
+     */
+    public function message()
+    {
+        return ':attribute 必须是手机号';
+    }
+}

+ 2 - 0
app/Http/Kernel.php

@@ -2,6 +2,7 @@
 
 namespace App\Http;
 
+use App\Http\Middleware\AuthLoginMiddleware;
 use Illuminate\Foundation\Http\Kernel as HttpKernel;
 
 class Kernel extends HttpKernel
@@ -42,6 +43,7 @@ class Kernel extends HttpKernel
             // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
             'throttle:api',
             \Illuminate\Routing\Middleware\SubstituteBindings::class,
+            AuthLoginMiddleware::class,
         ],
     ];
 

+ 6 - 5
app/Http/Middleware/MiniAuthMiddleware.php → app/Http/Middleware/AuthLoginMiddleware.php

@@ -9,21 +9,22 @@ use Illuminate\Auth\AuthenticationException;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
 
-class MiniAuthMiddleware
+class AuthLoginMiddleware
 {
     public function handle(Request $request, Closure $next)
     {
         $token = $request->header('Authorization');
         if (empty($token)) {
-            throw new AuthenticationException("need authorization");
+            return $next($request);
         }
+
         $uid = app(AuthService::class)->decryptToken(substr($token, 7));
 
         $u = User::find($uid);
         if (is_null($u)) {
-            return response()->json([
-                "code" => 401,
-            ]);
+            if (empty($token)) {
+                return $next($request);
+            }
         }
         Auth::login($u);
 

+ 24 - 0
app/Http/Middleware/CheckAuthMiddleware.php

@@ -0,0 +1,24 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use App\Models\User\User;
+use App\Modules\Admin\Services\AuthService;
+use Closure;
+use Illuminate\Auth\AuthenticationException;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+
+class CheckAuthMiddleware
+{
+    public function handle(Request $request, Closure $next)
+    {
+        $user = Auth::user();
+        if (is_null($user)) {
+            return response()->json([
+                "code" => 401,
+            ]);
+        }
+        return $next($request);
+    }
+}

+ 3 - 2
app/Models/User/User.php

@@ -6,6 +6,7 @@ use App\Base\BaseModel;
 use App\Models\Auth\AdminGroup;
 use Illuminate\Auth\Authenticatable;
 use Illuminate\Support\Arr;
+use Illuminate\Support\Facades\Hash;
 
 /**
  * App\Models\User
@@ -55,12 +56,12 @@ class User extends BaseModel implements \Illuminate\Contracts\Auth\Authenticatab
 
     public function checkPassword($password): bool
     {
-        return $this->password == $this->hashPassword($password);
+        return \Hash::check($password, $this->password);
     }
 
     public function hashPassword($password)
     {
-        return hashid_encode($password);
+        return \Hash::make($password);
     }
 
     public function group()

+ 38 - 0
app/Modules/Mini/Controllers/AuthController.php

@@ -6,6 +6,7 @@ use App\Base\BaseController;
 use App\Models\User\User;
 use App\Modules\Mini\Services\AuthService;
 use App\Modules\Mini\Services\WechatService;
+use App\Modules\Mini\Services\EmailService;
 use Illuminate\Support\Facades\Auth;
 
 class AuthController extends BaseController
@@ -82,4 +83,41 @@ class AuthController extends BaseController
 
         return $this->ok(app(AuthService::class)->encryptToken($id));
     }
+
+    public function emailCaptcha()
+    {
+        $params = $this->valid([
+            "email" => "required|email",
+            "source" => "required",
+        ]);
+
+        return $this->ok(app(EmailService::class)->emailCaptcha($params['email'], $params['source']));
+    }
+
+    public function register()
+    {
+        return $this->ok([
+            "token" => "token",
+            "name" => "",
+            "phone" => "",
+        ]);
+    }
+
+    public function login()
+    {
+        return $this->ok([
+            "token" => "token",
+            "name" => "",
+            "phone" => "",
+        ]);
+    }
+
+    public function resetPassword()
+    {
+        return $this->ok([
+            "token" => "token",
+            "name" => "",
+            "phone" => "",
+        ]);
+    }
 }

+ 25 - 0
app/Modules/Mini/Services/AuthService.php

@@ -22,6 +22,31 @@ class AuthService extends BaseService
         return $this->encryptToken($user->id);
     }
 
+    public function login($params)
+    {
+
+    }
+
+    public function register($params)
+    {
+        if (User::where("email", $params['email'])->first()) {
+            throw new ClientException("该邮件已经注册了");
+        }
+        if (User::where("phone", $params['phone'])->first()) {
+            throw new ClientException("该手机已经注册了");
+        }
+        $user = new User();
+        $user->email = $params['email'];
+        $user->phone = $params['phone'];
+        $user->group_id = 0;
+        $user->status = User::STATUS_OK;
+        $user->password = $user->hashPassword($params['password']);
+
+        $user->save();
+
+        return $user;
+    }
+
     public function encryptToken($uid)
     {
         return md5($uid . time()) . $uid;

+ 4 - 1
app/Modules/Mini/Services/CaptchaService.php

@@ -9,9 +9,12 @@ class CaptchaService extends BaseService
 {
     public function createCaptcha($email)
     {
-        return Cache::remember($this->cacheKey($email), 10 * 60, function () use ($email) {
+        $code = Cache::remember($this->cacheKey($email), 10 * 60, function () use ($email) {
             return mt_rand(100000, 999999);
         });
+
+        logger()->info("captcha created:" . $code);
+        return $code;
     }
 
     public function cacheKey($email): string

+ 23 - 5
app/Modules/Pc/Controllers/AuthController.php

@@ -3,9 +3,12 @@
 namespace App\Modules\Pc\Controllers;
 
 use App\Base\BaseController;
+use App\Base\Validation\Phone;
+use App\Exceptions\ClientException;
 use App\Models\User\User;
-use App\Modules\Pc\Services\AuthService;
-use App\Modules\Pc\Services\EmailService;
+use App\Modules\Mini\Services\AuthService;
+use App\Modules\Mini\Services\CaptchaService;
+use App\Modules\Mini\Services\EmailService;
 use Illuminate\Support\Facades\Auth;
 
 class AuthController extends BaseController
@@ -38,15 +41,30 @@ class AuthController extends BaseController
 
     public function register()
     {
+        $params = $this->valid([
+            "email" => "required|email",
+            "phone" => ["required", new Phone()],
+            "password" => "required",
+            "captcha" => "required",
+        ]);
+        if (!app(CaptchaService::class)->checkCaptcha($params['email'], $params['captcha'])) {
+            throw new ClientException("验证码错误");
+        }
+        $user = app(AuthService::class)->register($params);
         return $this->ok([
-            "token" => "token",
-            "name" => "",
-            "phone" => "",
+            "token" => app(AuthService::class)->encryptToken($user->id),
+            "name" => $user->name,
+            "phone" => $user->phone,
         ]);
     }
 
     public function login()
     {
+        $params = $this->valid([
+            "userinfo" => "required",
+            "password" => "required",
+        ]);
+        app(AuthService::class)->login($params);
         return $this->ok([
             "token" => "token",
             "name" => "",

+ 0 - 8
app/Modules/Pc/Services/AuthService.php

@@ -1,8 +0,0 @@
-<?php
-
-namespace App\Modules\Pc\Services;
-
-class AuthService extends \App\Modules\Mini\Services\AuthService
-{
-
-}

+ 0 - 8
app/Modules/Pc/Services/EmailService.php

@@ -1,8 +0,0 @@
-<?php
-
-namespace App\Modules\Pc\Services;
-
-class EmailService extends \App\Modules\Mini\Services\EmailService
-{
-
-}

+ 1 - 0
app/Providers/AppServiceProvider.php

@@ -3,6 +3,7 @@
 namespace App\Providers;
 
 use Illuminate\Support\ServiceProvider;
+use Illuminate\Validation\Validator;
 
 class AppServiceProvider extends ServiceProvider
 {

+ 1 - 1
routes/mini.php

@@ -7,7 +7,7 @@ Route::get('/', [\App\Http\Controllers\Controller::class, "ping"]);
 
 Route::post("/auth/codeToSession", [\App\Modules\Mini\Controllers\AuthController::class, "codeToSession"]);
 Route::get("/auth/test", [\App\Modules\Mini\Controllers\AuthController::class, "test"]);
-Route::middleware([\App\Http\Middleware\MiniAuthMiddleware::class])->group(function () {
+Route::middleware([\App\Http\Middleware\CheckAuthMiddleware::class])->group(function () {
     Route::post("/auth/decryptUserInfo", [\App\Modules\Mini\Controllers\AuthController::class, "decryptUserInfo"]);
     Route::post("/auth/decryptPhone", [\App\Modules\Mini\Controllers\AuthController::class, "decryptPhone"]);
     Route::get("/auth/profile", [\App\Modules\Mini\Controllers\AuthController::class, "profile"]);

+ 35 - 32
routes/pc.php

@@ -5,40 +5,43 @@ use Illuminate\Support\Facades\Route;
 
 Route::get('/', [\App\Http\Controllers\Controller::class, "ping"]);
 
+Route::post("/auth/codeToSession", [\App\Modules\Mini\Controllers\AuthController::class, "codeToSession"]);
+Route::get("/auth/test", [\App\Modules\Mini\Controllers\AuthController::class, "test"]);
+
 Route::post("/auth/emailCaptcha", [\App\Modules\Pc\Controllers\AuthController::class, "emailCaptcha"]);
 Route::post("/auth/register", [\App\Modules\Pc\Controllers\AuthController::class, "register"]);
 Route::post("/auth/login", [\App\Modules\Pc\Controllers\AuthController::class, "login"]);
 Route::post("/auth/resetPassword", [\App\Modules\Pc\Controllers\AuthController::class, "resetPassword"]);
-
-Route::get("/auth/profile", [\App\Modules\Pc\Controllers\AuthController::class, "profile"]);
-
-Route::get("/page/home", [\App\Modules\Pc\Controllers\PageController::class, "home"]);
-Route::get("/page/categoryTree", [\App\Modules\Pc\Controllers\PageController::class, "categoryTree"]);
-Route::get("/page/categoryGoods", [\App\Modules\Pc\Controllers\PageController::class, "categoryGoods"]);
-Route::get("/page/filterConfig", [\App\Modules\Pc\Controllers\PageController::class, "filterConfig"]);
-Route::get("/page/search", [\App\Modules\Pc\Controllers\PageController::class, "search"]);
-
-Route::get("/goods", [\App\Modules\Pc\Controllers\GoodsController::class, "goods"]);
-Route::post("/goods/fav", [\App\Modules\Pc\Controllers\GoodsController::class, "fav"]);
-Route::post("/goods/ask", [\App\Modules\Pc\Controllers\GoodsController::class, "ask"]);
-
-Route::get("/user/address", [\App\Modules\Pc\Controllers\UserController::class, "address"]);
-Route::post("/user/addressDel", [\App\Modules\Pc\Controllers\UserController::class, "addressDel"]);
-Route::post("/user/addressStore", [\App\Modules\Pc\Controllers\UserController::class, "addressStore"]);
-
-Route::get("/user/fav", [\App\Modules\Pc\Controllers\UserController::class, "fav"]);
-Route::post("/user/favDel", [\App\Modules\Pc\Controllers\UserController::class, "favDel"]);
-
-Route::get("/cart", [\App\Modules\Pc\Controllers\CartController::class, "index"]);
-Route::post("/cart/del", [\App\Modules\Pc\Controllers\CartController::class, "del"]);
-Route::post("/cart/store", [\App\Modules\Pc\Controllers\CartController::class, "store"]);
-Route::post("/cart/ask", [\App\Modules\Pc\Controllers\CartController::class, "ask"]);
-
-Route::get("/config", function () {
-    return [
-        "code" => 200,
-        "data" => [
-            "search_keywords" => ["热搜词1", "热搜词2", "热搜词3"],
-        ],
-    ];
+Route::middleware([\App\Http\Middleware\CheckAuthMiddleware::class])->group(function () {
+    Route::post("/auth/decryptUserInfo", [\App\Modules\Mini\Controllers\AuthController::class, "decryptUserInfo"]);
+    Route::post("/auth/decryptPhone", [\App\Modules\Mini\Controllers\AuthController::class, "decryptPhone"]);
+    Route::get("/auth/profile", [\App\Modules\Mini\Controllers\AuthController::class, "profile"]);
+
+    Route::post("/goods/fav", [\App\Modules\Mini\Controllers\GoodsController::class, "fav"]);
+    Route::post("/goods/ask", [\App\Modules\Mini\Controllers\GoodsController::class, "ask"]);
+    Route::post("/goods/cart", [\App\Modules\Mini\Controllers\GoodsController::class, "cart"]);
+
+    Route::get("/user/address", [\App\Modules\Mini\Controllers\UserController::class, "address"]);
+    Route::post("/user/addressDel", [\App\Modules\Mini\Controllers\UserController::class, "addressDel"]);
+    Route::post("/user/addressStore", [\App\Modules\Mini\Controllers\UserController::class, "addressStore"]);
+
+    Route::post("/user/company", [\App\Modules\Mini\Controllers\UserController::class, "company"]);
+    Route::get("/user/fav", [\App\Modules\Mini\Controllers\UserController::class, "fav"]);
+    Route::post("/user/favDel", [\App\Modules\Mini\Controllers\UserController::class, "favDel"]);
+
+    Route::get("/cart", [\App\Modules\Mini\Controllers\CartController::class, "index"]);
+    Route::post("/cart/del", [\App\Modules\Mini\Controllers\CartController::class, "del"]);
+    Route::post("/cart/store", [\App\Modules\Mini\Controllers\CartController::class, "store"]);
+    Route::post("/cart/ask", [\App\Modules\Mini\Controllers\CartController::class, "ask"]);
 });
+
+Route::get("/page/home", [\App\Modules\Mini\Controllers\PageController::class, "home"]);
+Route::get("/page/categoryTree", [\App\Modules\Mini\Controllers\PageController::class, "categoryTree"]);
+Route::get("/page/categoryGoods", [\App\Modules\Mini\Controllers\PageController::class, "categoryGoods"]);
+Route::get("/page/filterConfig", [\App\Modules\Mini\Controllers\PageController::class, "filterConfig"]);
+Route::get("/page/search", [\App\Modules\Mini\Controllers\PageController::class, "search"]);
+
+Route::get("/goods", [\App\Modules\Mini\Controllers\GoodsController::class, "goods"]);
+
+Route::get("/config", [\App\Modules\Mini\Controllers\ConfigController::class, "index"]);
+