LoginController.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Models\User;
  5. use App\Http\Models\UserSubscribe;
  6. use Illuminate\Http\Request;
  7. use Response;
  8. use Cache;
  9. /**
  10. * 登录接口
  11. * Class LoginController
  12. *
  13. * @package App\Http\Controllers
  14. */
  15. class LoginController extends Controller
  16. {
  17. protected static $config;
  18. function __construct()
  19. {
  20. self::$config = $this->systemConfig();
  21. }
  22. // 登录返回订阅信息
  23. public function login(Request $request)
  24. {
  25. $username = $request->get('username');
  26. $password = $request->get('password');
  27. $cacheKey = 'request_times_' . md5($request->getClientIp());
  28. // 10分钟内请求失败15次,则封IP一小时
  29. if (Cache::has($cacheKey)) {
  30. if (Cache::get($cacheKey) >= 15) {
  31. return Response::json(['status' => 'fail', 'data' => [], 'message' => '频繁访问失败,禁止访问1小时']);
  32. }
  33. } else {
  34. Cache::put($cacheKey, 1, 10);
  35. }
  36. if (!$username || !$password) {
  37. Cache::increment($cacheKey);
  38. return Response::json(['status' => 'fail', 'data' => [], 'message' => '账号密码不能为空']);
  39. }
  40. $user = User::query()->where('username', trim($username))->where('password', md5($password))->where('status', '>=', 0)->first();
  41. if (!$user) {
  42. Cache::increment($cacheKey);
  43. return Response::json(['status' => 'fail', 'data' => [], 'message' => '账号不存在或已被禁用']);
  44. }
  45. // 如果生成过订阅链接则生成一个
  46. $subscribe = UserSubscribe::query()->where('user_id', $user->id)->first();
  47. if (!$subscribe) {
  48. $code = $this->makeSubscribeCode();
  49. $obj = new UserSubscribe();
  50. $obj->user_id = $user->id;
  51. $obj->code = $code;
  52. $obj->times = 0;
  53. $obj->save();
  54. } else {
  55. $code = $subscribe->code;
  56. }
  57. // 用户信息
  58. unset($user->password, $user->remember_token);
  59. $data['user'] = $user;
  60. // 订阅链接
  61. $data['link'] = self::$config['subscribe_domain'] ? self::$config['subscribe_domain'] . '/s/' . $code : self::$config['website_url'] . '/s/' . $code;
  62. return Response::json(['status' => 'success', 'data' => $data, 'message' => '登录成功']);
  63. }
  64. }