|
|
@@ -5,9 +5,11 @@ namespace App\Http\Controllers\Api;
|
|
|
use App\Http\Controllers\Controller;
|
|
|
use App\Http\Models\User;
|
|
|
use App\Http\Models\UserSubscribe;
|
|
|
+use App\Http\Models\UserSubscribeLog;
|
|
|
use Illuminate\Http\Request;
|
|
|
use Response;
|
|
|
use Cache;
|
|
|
+use DB;
|
|
|
|
|
|
/**
|
|
|
* 登录接口
|
|
|
@@ -27,8 +29,8 @@ class LoginController extends Controller
|
|
|
// 登录返回订阅信息
|
|
|
public function login(Request $request)
|
|
|
{
|
|
|
- $username = $request->get('username');
|
|
|
- $password = $request->get('password');
|
|
|
+ $username = trim($request->get('username'));
|
|
|
+ $password = trim($request->get('password'));
|
|
|
$cacheKey = 'request_times_' . md5($request->getClientIp());
|
|
|
|
|
|
// 10分钟内请求失败15次,则封IP一小时
|
|
|
@@ -43,37 +45,63 @@ class LoginController extends Controller
|
|
|
if (!$username || !$password) {
|
|
|
Cache::increment($cacheKey);
|
|
|
|
|
|
- return Response::json(['status' => 'fail', 'data' => [], 'message' => '账号密码不能为空']);
|
|
|
+ return Response::json(['status' => 'fail', 'data' => [], 'message' => '账号或密码错误']);
|
|
|
}
|
|
|
|
|
|
- $user = User::query()->where('username', trim($username))->where('password', md5($password))->where('status', '>=', 0)->first();
|
|
|
+ $user = User::query()->where('username', $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();
|
|
|
+ DB::beginTransaction();
|
|
|
+ try {
|
|
|
+ // 如果未生成过订阅链接则生成一个
|
|
|
+ $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;
|
|
|
- }
|
|
|
+ $subscribe = new UserSubscribe();
|
|
|
+ $subscribe->user_id = $user->id;
|
|
|
+ $subscribe->code = $code;
|
|
|
+ $subscribe->times = 0;
|
|
|
+ $subscribe->save();
|
|
|
+ } else {
|
|
|
+ $code = $subscribe->code;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新订阅链接访问次数
|
|
|
+ $subscribe->increment('times', 1);
|
|
|
+
|
|
|
+ // 记录每次请求
|
|
|
+ $this->log($subscribe->id, $request->getClientIp(), 'API访问');
|
|
|
+
|
|
|
+ // 处理用户信息
|
|
|
+ unset($user->password, $user->remember_token);
|
|
|
+ $data['user'] = $user;
|
|
|
|
|
|
- // 用户信息
|
|
|
- unset($user->password, $user->remember_token);
|
|
|
- $data['user'] = $user;
|
|
|
+ // 订阅链接
|
|
|
+ $data['link'] = self::$config['subscribe_domain'] ? self::$config['subscribe_domain'] . '/s/' . $code : self::$config['website_url'] . '/s/' . $code;
|
|
|
|
|
|
- // 订阅链接
|
|
|
- $data['link'] = self::$config['subscribe_domain'] ? self::$config['subscribe_domain'] . '/s/' . $code : self::$config['website_url'] . '/s/' . $code;
|
|
|
+ DB::commit();
|
|
|
|
|
|
- return Response::json(['status' => 'success', 'data' => $data, 'message' => '登录成功']);
|
|
|
+ return Response::json(['status' => 'success', 'data' => $data, 'message' => '登录成功']);
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ DB::rollBack();
|
|
|
+
|
|
|
+ return Response::json(['status' => 'success', 'data' => [], 'message' => '登录失败']);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 写入订阅访问日志
|
|
|
+ private function log($subscribeId, $ip, $headers)
|
|
|
+ {
|
|
|
+ $log = new UserSubscribeLog();
|
|
|
+ $log->sid = $subscribeId;
|
|
|
+ $log->request_ip = $ip;
|
|
|
+ $log->request_time = date('Y-m-d H:i:s');
|
|
|
+ $log->request_header = $headers;
|
|
|
+ $log->save();
|
|
|
}
|
|
|
}
|