Skip to content
  • P
    Projects
  • G
    Groups
  • S
    Snippets
  • Help

semour / semour_web

  • This project
    • Loading...
  • Sign in
Go to a project
  • Project
  • Repository
  • Issues 0
  • Merge Requests 0
  • Pipelines
  • Wiki
  • Snippets
  • Settings
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • Files
  • Commits
  • Branches
  • Tags
  • Contributors
  • Graph
  • Compare
  • Charts
Find file
Normal viewHistoryPermalink
Switch branch/tag
  • semour_web
  • app
  • Http
  • Controllers
  • Api
  • AuthApiController.php
AuthApiController.php 4.64 KB
杨树贤's avatar
api返回
186d5283
 
杨树贤 committed 2 years ago
1 2 3 4
<?php

namespace App\Http\Controllers\Api;

杨树贤's avatar
独立出请求验证
0c1b982d
 
杨树贤 committed 2 years ago
5
use App\Http\Requests\UserRegister;
杨树贤's avatar
用户模型修改
ab5dd96d
 
杨树贤 committed 2 years ago
6
use App\Models\UserModel;
杨树贤's avatar
注册接口
f3006e7d
 
杨树贤 committed 2 years ago
7
use Illuminate\Foundation\Auth\RegistersUsers;
杨树贤's avatar
api返回
186d5283
 
杨树贤 committed 2 years ago
8 9
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Http\Request;
杨树贤's avatar
重置秘密和邮箱相关接口
1a52f4a5
 
杨树贤 committed 2 years ago
10 11 12 13
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Redis;
杨树贤's avatar
登陆接口
3638edfd
 
杨树贤 committed 2 years ago
14
use Illuminate\Support\Facades\Validator;
杨树贤's avatar
api返回
186d5283
 
杨树贤 committed 2 years ago
15 16 17 18

class AuthApiController extends Controller
{

杨树贤's avatar
注册接口
f3006e7d
 
杨树贤 committed 2 years ago
19 20
    use ThrottlesLogins, RegistersUsers;

杨树贤's avatar
独立出请求验证
0c1b982d
 
杨树贤 committed 2 years ago
21
    public function register(UserRegister $request)
杨树贤's avatar
注册接口
f3006e7d
 
杨树贤 committed 2 years ago
22
    {
杨树贤's avatar
询价接口
c63800c0
 
杨树贤 committed 2 years ago
23
        $email = $request->input('email');
杨树贤's avatar
用户模型修改
ab5dd96d
 
杨树贤 committed 2 years ago
24
        if (UserModel::where('email', $email)->exists()) {
杨树贤's avatar
询价接口
c63800c0
 
杨树贤 committed 2 years ago
25 26 27
            return $this->setError('Email has been taken');
        }

杨树贤's avatar
优化接口
045dfe30
 
杨树贤 committed 2 years ago
28
        //判断邮箱验证码
杨树贤's avatar
询价接口
c63800c0
 
杨树贤 committed 2 years ago
29
        $redisKey = 'sem_email_code_register_' . $email;
杨树贤's avatar
优化接口
045dfe30
 
杨树贤 committed 2 years ago
30 31 32 33
        $cachedEmailCode = Redis::get($redisKey);
        if ($cachedEmailCode != $request->input('email_code')) {
            return $this->setError('Email code invalid');
        }
杨树贤's avatar
用户模型修改
ab5dd96d
 
杨树贤 committed 2 years ago
34
        $user = UserModel::createUser($request->all());
杨树贤's avatar
注册接口
f3006e7d
 
杨树贤 committed 2 years ago
35

杨树贤's avatar
重置秘密和邮箱相关接口
1a52f4a5
 
杨树贤 committed 2 years ago
36 37
        \Auth::login($user);
        return $this->setSuccess('Register success');
杨树贤's avatar
注册接口
f3006e7d
 
杨树贤 committed 2 years ago
38 39
    }

杨树贤's avatar
api返回
186d5283
 
杨树贤 committed 2 years ago
40 41 42

    public function login(Request $request)
    {
杨树贤's avatar
登陆接口
3638edfd
 
杨树贤 committed 2 years ago
43 44
        $validator = Validator::make($request->all(), [
            'email' => 'required|string|email|max:255',
杨树贤's avatar
注册接口
f3006e7d
 
杨树贤 committed 2 years ago
45
            'password' => 'required|string|min:8',
杨树贤's avatar
登陆接口
3638edfd
 
杨树贤 committed 2 years ago
46 47 48 49 50 51
        ], [
            'password.min' => 'Password must be at least 8 characters long.'
        ]);

        if ($validator->fails()) {
            return $this->setError($validator->errors()->first());
杨树贤's avatar
api返回
186d5283
 
杨树贤 committed 2 years ago
52 53
        }

杨树贤's avatar
用户模型修改
ab5dd96d
 
杨树贤 committed 2 years ago
54
        $userExists = UserModel::where('email', $request->email)->exists();
杨树贤's avatar
重置秘密和邮箱相关接口
1a52f4a5
 
杨树贤 committed 2 years ago
55 56 57 58
        if (!$userExists) {
            return $this->setError('User dose not exist');
        }

杨树贤's avatar
api返回
186d5283
 
杨树贤 committed 2 years ago
59
        if ($this->attemptLogin($request)) {
杨树贤's avatar
登陆接口
3638edfd
 
杨树贤 committed 2 years ago
60
            $request->session()->regenerate();
杨树贤's avatar
重置秘密和邮箱相关接口
1a52f4a5
 
杨树贤 committed 2 years ago
61
            return $this->setSuccess('Login success');
杨树贤's avatar
api返回
186d5283
 
杨树贤 committed 2 years ago
62 63 64 65
        }

        $this->incrementLoginAttempts($request);

杨树贤's avatar
重置秘密和邮箱相关接口
1a52f4a5
 
杨树贤 committed 2 years ago
66 67 68 69 70 71 72 73 74 75 76
        return $this->setError('Login failure');
    }

    public function logout(Request $request)
    {
        Auth::logout();
        return $this->setSuccess('Logout success');
    }

    public function resetPassword(Request $request)
    {
杨树贤's avatar
邮箱
0dc9b2db
 
杨树贤 committed 2 years ago
77

杨树贤's avatar
重置秘密和邮箱相关接口
1a52f4a5
 
杨树贤 committed 2 years ago
78 79 80 81 82 83 84 85 86 87 88 89 90
        $validator = Validator::make($request->all(), [
            'old_password' => 'required|min:8',
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ], [
            'old_password.min' => 'Password must be at least 8 characters long.',
            'password.min' => 'Password must be at least 8 characters long.',
            'password.confirmed' => 'Passwords do not match!',
        ]);

        if ($validator->fails()) {
            return $this->setError($validator->errors()->first());
        }
        $password = $request->get('password');
杨树贤's avatar
邮箱
0dc9b2db
 
杨树贤 committed 2 years ago
91 92
        $oldPassword = $request->get('old_password');
        $userId = Auth::user()->id;
杨树贤's avatar
用户模型修改
ab5dd96d
 
杨树贤 committed 2 years ago
93
        $hashedPassword = UserModel::where('id', $userId)->value('password');
杨树贤's avatar
邮箱
0dc9b2db
 
杨树贤 committed 2 years ago
94
        if (!Hash::check($oldPassword, $hashedPassword)) {
杨树贤's avatar
重置秘密和邮箱相关接口
1a52f4a5
 
杨树贤 committed 2 years ago
95 96 97
            return $this->setError('Wrong Password!');
        }

杨树贤's avatar
用户模型修改
ab5dd96d
 
杨树贤 committed 2 years ago
98
        $user = UserModel::find($userId);
杨树贤's avatar
重置秘密和邮箱相关接口
1a52f4a5
 
杨树贤 committed 2 years ago
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
        $user->password = Hash::make($password);
        $user->update_time = time();
        $result = $user->save();
        if (!$result) {
            return $this->setError('Reset password failed');
        }

        return $this->setSuccess('Reset password success');
    }

    //发送邮箱验证码
    public function sendEmailCode(Request $request)
    {
        $email = $request->input('email');
        $type = $request->input('type', 'register');
杨树贤's avatar
修改用户信息相关接口
fcc22723
 
杨树贤 committed 2 years ago
114 115 116 117 118 119

        $validator = Validator::make($request->all(), [
            'email' => 'required|email',
        ]);
        if ($validator->fails()) {
            return $this->setError($validator->errors()->first());
杨树贤's avatar
重置秘密和邮箱相关接口
1a52f4a5
 
杨树贤 committed 2 years ago
120
        }
杨树贤's avatar
用户模型修改
ab5dd96d
 
杨树贤 committed 2 years ago
121
        $info = UserModel::where('email', $email)->first();
杨树贤's avatar
邮箱
0dc9b2db
 
杨树贤 committed 2 years ago
122
        if ($info && $type == 'register') {
杨树贤's avatar
重置秘密和邮箱相关接口
1a52f4a5
 
杨树贤 committed 2 years ago
123 124 125 126 127
            return $this->setError('This email had been registered');
        }

        //发送验证码
        $code = mt_rand(1000, 9999);
杨树贤's avatar
邮箱
0dc9b2db
 
杨树贤 committed 2 years ago
128
        $redisKey = 'sem_email_code_' . $type . '_' . $email;
杨树贤's avatar
询价接口
c63800c0
 
杨树贤 committed 2 years ago
129 130 131
        if (Redis::get($redisKey)) {
            return $this->setError('Email code had been sent');
        }
杨树贤's avatar
邮箱
0dc9b2db
 
杨树贤 committed 2 years ago
132
        Redis::set($redisKey, $code);
杨树贤's avatar
重置秘密和邮箱相关接口
1a52f4a5
 
杨树贤 committed 2 years ago
133 134 135 136 137 138 139 140 141 142 143 144 145
        Redis::expire($redisKey, 60);
        $subject = config('mail.from.name');
        $msg = 'Email Code:' . $code . '.';
        Mail::raw($msg, function ($message) use ($email, $subject) {
            $message->to($email)->subject($subject);
        });

        //错误处理
        if (count(Mail::failures())) {
            return $this->setError('Email code send failed');
        }

        return $this->setSuccess('Email code send success');
杨树贤's avatar
api返回
186d5283
 
杨树贤 committed 2 years ago
146 147 148
    }

}