From af1637641bbc96f3f48cd28fc9322a306abfb54d Mon Sep 17 00:00:00 2001 From: TL Date: Thu, 23 Jun 2022 18:11:29 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=BE=E5=AE=A2=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- beike/Models/Customer.php | 15 ++++ beike/Shop/Http/Controllers/Controller.php | 5 ++ .../Shop/Http/Controllers/LoginController.php | 39 ++++++++++ beike/Shop/Providers/ShopServiceProvider.php | 16 +++++ beike/Shop/Routes/shop.php | 8 +++ ...022_06_23_075504_create_customer_table.php | 71 +++++++++++++++++++ themes/default/login.blade.php | 41 +++++++++++ 7 files changed, 195 insertions(+) create mode 100644 beike/Models/Customer.php create mode 100644 beike/Shop/Http/Controllers/LoginController.php create mode 100644 database/migrations/2022_06_23_075504_create_customer_table.php create mode 100644 themes/default/login.blade.php diff --git a/beike/Models/Customer.php b/beike/Models/Customer.php new file mode 100644 index 00000000..4049f02c --- /dev/null +++ b/beike/Models/Customer.php @@ -0,0 +1,15 @@ + + * @created 2022-06-22 20:22:54 + * @modified 2022-06-22 20:22:54 + */ + +namespace Beike\Shop\Http\Controllers; + +use Beike\Models\Customer; +use Illuminate\Http\Request; + +class LoginController extends Controller +{ + public function index() + { + return view('login'); + } + + public function store(Request $request) + { + $credentials = $request->validate([ + 'email' => ['required', 'email'], + 'password' => ['required'], + ]); + + if (auth(Customer::AUTH_GUARD)->attempt($credentials)) { + return redirect(route('home')); + } + + return back()->withErrors([ + 'email' => 'The provided credentials do not match our records.', + ]); + } +} diff --git a/beike/Shop/Providers/ShopServiceProvider.php b/beike/Shop/Providers/ShopServiceProvider.php index cd96a7c1..07a6ef2b 100644 --- a/beike/Shop/Providers/ShopServiceProvider.php +++ b/beike/Shop/Providers/ShopServiceProvider.php @@ -2,7 +2,9 @@ namespace Beike\Shop\Providers; +use Beike\Models\Customer; use Beike\Models\Setting; +use Illuminate\Support\Facades\Config; use Illuminate\Support\Str; use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; @@ -22,6 +24,7 @@ class ShopServiceProvider extends ServiceProvider $this->mergeConfigFrom(__DIR__ . '/../../Config/beike.php', 'beike'); $this->loadSettings(); $this->loadShareView(); + $this->registerGuard(); } protected function loadSettings() @@ -43,4 +46,17 @@ class ShopServiceProvider extends ServiceProvider $menuCategories = CategoryRepo::getTwoLevelCategories(); View::share('categories', $menuCategories); } + + protected function registerGuard() + { + Config::set('auth.guards.'.Customer::AUTH_GUARD, [ + 'driver' => 'session', + 'provider' => 'shop_customer', + ]); + + Config::set('auth.providers.shop_customer', [ + 'driver' => 'eloquent', + 'model' => Customer::class, + ]); + } } diff --git a/beike/Shop/Routes/shop.php b/beike/Shop/Routes/shop.php index 8b500b75..0fbda175 100644 --- a/beike/Shop/Routes/shop.php +++ b/beike/Shop/Routes/shop.php @@ -14,4 +14,12 @@ Route::prefix('/') Route::get('categories/{category}', [Beike\Shop\Http\Controllers\CategoryController::class, 'show'])->name('categories.show'); Route::get('products/{product}', [Beike\Shop\Http\Controllers\ProductController::class, 'show'])->name('products.show'); + + Route::get('login', [Beike\Shop\Http\Controllers\LoginController::class, 'index'])->name('login.index'); + Route::post('login', [Beike\Shop\Http\Controllers\LoginController::class, 'store'])->name('login.store'); + + Route::middleware('auth:'.\Beike\Models\Customer::AUTH_GUARD) + ->group(function () { + + }); }); diff --git a/database/migrations/2022_06_23_075504_create_customer_table.php b/database/migrations/2022_06_23_075504_create_customer_table.php new file mode 100644 index 00000000..fd289916 --- /dev/null +++ b/database/migrations/2022_06_23_075504_create_customer_table.php @@ -0,0 +1,71 @@ +id(); + $table->string('email')->unique(); + $table->string('password'); + $table->string('name'); + $table->string('avatar'); + $table->unsignedInteger('customer_group_id'); + $table->unsignedInteger('language_id'); + $table->text('cart'); + $table->tinyInteger('status'); + $table->string('code', 40); + $table->string('from', 16); + $table->timestamps(); + }); + + Schema::create('customer_groups', function (Blueprint $table) { + $table->id(); + $table->decimal('total', 12, 4); + $table->decimal('reward_point_factor', 12, 4); + $table->decimal('use_point_factor', 12, 4); + $table->decimal('discount_factor', 12, 4); + $table->integer('level'); + $table->timestamps(); + }); + + Schema::create('customer_group_descriptions', function (Blueprint $table) { + $table->id(); + $table->unsignedInteger('customer_group_id'); + $table->unsignedInteger('language_id'); + $table->string('name', 256); + $table->text('description'); + $table->timestamps(); + }); + + // Schema::create('customer_spending', function (Blueprint $table) { + // $table->id(); + // $table->unsignedInteger('customer_id'); + // $table->unsignedInteger('order_id'); + // $table->string('order_number', 32); + // $table->decimal('total', 12, 4); + // $table->timestamps(); + // }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('customers'); + Schema::dropIfExists('customer_groups'); + Schema::dropIfExists('customer_group_descriptions'); + } +} diff --git a/themes/default/login.blade.php b/themes/default/login.blade.php new file mode 100644 index 00000000..481ca6d5 --- /dev/null +++ b/themes/default/login.blade.php @@ -0,0 +1,41 @@ +@extends('layout.master') + +@section('content') +

Login

+
+ @csrf + +
+
+
+ 邮箱 +
+ +
+ @error('email') + + @enderror +
+ +
+
+
+ 密码 +
+ +
+ @error('password') + + @enderror +
+ + @if (session('error')) +
+ {{ session('error') }} +
+ @endif + + +
+ +@endsection