Bläddra i källkod

加入用户登录API,用于定制客户端

bingo 7 år sedan
förälder
incheckning
3b809275fb

+ 79 - 0
app/Http/Controllers/Api/LoginController.php

@@ -0,0 +1,79 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+use App\Http\Controllers\Controller;
+use App\Http\Models\User;
+use App\Http\Models\UserSubscribe;
+use Illuminate\Http\Request;
+use Response;
+use Cache;
+
+/**
+ * 登录接口
+ * Class LoginController
+ *
+ * @package App\Http\Controllers
+ */
+class LoginController extends Controller
+{
+    protected static $config;
+
+    function __construct()
+    {
+        self::$config = $this->systemConfig();
+    }
+
+    // 登录返回订阅信息
+    public function login(Request $request)
+    {
+        $username = $request->get('username');
+        $password = $request->get('password');
+        $cacheKey = 'request_times_' . md5($request->getClientIp());
+
+        // 10分钟内请求失败15次,则封IP一小时
+        if (Cache::has($cacheKey)) {
+            if (Cache::get($cacheKey) >= 15) {
+                return Response::json(['status' => 'fail', 'data' => [], 'message' => '频繁访问失败,禁止访问1小时']);
+            }
+        } else {
+            Cache::put($cacheKey, 1, 10);
+        }
+
+        if (!$username || !$password) {
+            Cache::increment($cacheKey);
+
+            return Response::json(['status' => 'fail', 'data' => [], 'message' => '账号密码不能为空']);
+        }
+
+        $user = User::query()->where('username', trim($username))->where('password', md5($password))->where('status', '>=', 0)->first();
+        if (!$user) {
+            Cache::increment($cacheKey);
+
+            return Response::json(['status' => 'fail', 'data' => [], 'message' => '账号不存在或已被禁用']);
+        }
+
+        // 如果生成过订阅链接则生成一个
+        $subscribe = UserSubscribe::query()->where('user_id', $user->id)->first();
+        if (!$subscribe) {
+            $code = $this->makeSubscribeCode();
+
+            $obj = new UserSubscribe();
+            $obj->user_id = $user->id;
+            $obj->code = $code;
+            $obj->times = 0;
+            $obj->save();
+        } else {
+            $code = $subscribe->code;
+        }
+
+        // 用户信息
+        unset($user->password, $user->custom_method, $user->remember_token);
+        $data['user'] = $user;
+
+        // 订阅链接
+        $data['link'] = self::$config['subscribe_domain'] ? self::$config['subscribe_domain'] . '/s/' . $code : self::$config['website_url'] . '/s/' . $code;
+
+        return Response::json(['status' => 'success', 'data' => $data, 'message' => '登录成功']);
+    }
+}

+ 1 - 1
app/Http/Controllers/Api/YzyController.php

@@ -13,8 +13,8 @@ use App\Http\Models\PaymentCallback;
 use App\Http\Models\ReferralLog;
 use App\Http\Models\User;
 use Illuminate\Http\Request;
-use DB;
 use Log;
+use DB;
 
 /**
  * 有赞云支付

+ 1 - 1
app/Http/Controllers/SubscribeController.php

@@ -25,7 +25,7 @@ class SubscribeController extends Controller
         self::$config = $this->systemConfig();
     }
 
-    // 登录页
+    // 获取订阅信息
     public function index(Request $request, $code)
     {
         if (empty($code)) {

+ 4 - 2
app/Http/Models/User.php

@@ -14,11 +14,13 @@ class User extends Model
     protected $table = 'user';
     protected $primaryKey = 'id';
 
-    function payment() {
+    function payment()
+    {
         return $this->hasMany(Payment::class, 'user_id', 'id');
     }
 
-    function label() {
+    function label()
+    {
         return $this->hasMany(UserLabel::class, 'user_id', 'id');
     }
 }

+ 2 - 1
routes/api.php

@@ -2,6 +2,7 @@
 
 Route::group(['namespace' => 'Api'], function () {
     Route::any('yzy/create', 'YzyController@create');
-
     Route::resource('yzy', 'YzyController');
+
+    Route::get('login', 'LoginController@login');
 });