李帅

1.新增两个接口,优化一下代码

......@@ -6,6 +6,8 @@ use App\Http\Controllers\Controller;
use App\Models\User;
use App\Models\UserProfile;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Jiannei\Response\Laravel\Support\Facades\Response;
use Laravel\Socialite\Facades\Socialite;
......@@ -37,26 +39,26 @@ class AuthController extends Controller
'provider' => 'required|in:facebook,twitter,github,apple'
]);
if ($validator->fails()){
return Response::fail('',500,$validator->errors());
if ($validator->fails()) {
return Response::fail('', 500, $validator->errors());
}
$socialUser = Socialite::driver($service)->stateless()->user();
$user = User::query()->where('provider', $service)
->where('provider_id', $socialUser->id)
->where('state',1)
->where('state', 1)
->first();
if ($user == null){
if ($user == null) {
// 如果该用户不存在则将其保存到 users 表
$newUser = new User();
$newUser->nickname = $socialUser->nickname ?? $socialUser->name;
$newUser->email = $socialUser->email ?? '';
$newUser->avatar = $socialUser->avatar ?? '';
$newUser->password = '';
$newUser->provider = $service;
$newUser->nickname = $socialUser->nickname ?? $socialUser->name;
$newUser->email = $socialUser->email ?? '';
$newUser->avatar = $socialUser->avatar ?? '';
$newUser->password = '';
$newUser->provider = $service;
$newUser->provider_id = $socialUser->id;
$newUser->save();
......@@ -82,26 +84,26 @@ class AuthController extends Controller
'token' => 'required|string',
'provider' => 'required|in:facebook,twitter,github,apple',
]);
if ($validator->fails()){
return Response::fail('',500,$validator->errors());
if ($validator->fails()) {
return Response::fail('', 500, $validator->errors());
}
$socialUser = Socialite::driver($service)->userFromToken($request->token);
$user = User::query()->where('provider', $service)
->where('provider_id', $socialUser->id)
->where('state',1)
->where('state', 1)
->first();
if ($user == null){
if ($user == null) {
// 如果该用户不存在则将其保存到 users 表
$newUser = new User();
$newUser->nickname = $socialUser->nickname ?? $socialUser->name;
$newUser->email = $socialUser->email ?? '';
$newUser->avatar = $socialUser->avatar ?? '';
$newUser->password = '';
$newUser->provider = $service;
$newUser->nickname = $socialUser->nickname ?? $socialUser->name;
$newUser->email = $socialUser->email ?? '';
$newUser->avatar = $socialUser->avatar ?? '';
$newUser->password = '';
$newUser->provider = $service;
$newUser->provider_id = $socialUser->id;
$newUser->save();
......@@ -122,6 +124,35 @@ class AuthController extends Controller
}
public function login(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email|max:255',
'password' => 'required',
]);
if ($validator->fails()){
return Response::fail('',500,$validator->errors());
}
try{
$user = User::query()->where('email', $request->email)->where('state', 1)->first();
if (! $user || ! Hash::check($request->password, $user->password)) {
throw new \Exception("账号或密码错误");
}
$token = $user->createToken($request->email)->plainTextToken;
$response = ['token' => $token];
return Response::success($response);
}catch ( \Exception $exception ){
return Response::fail($exception->getMessage(),500);
}
}
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
......@@ -130,16 +161,16 @@ class AuthController extends Controller
'verify_code' => 'required'
]);
if ($validator->fails()){
return Response::fail('',500,$validator->errors());
if ($validator->fails()) {
return Response::fail('', 500, $validator->errors());
}
try{
try {
$redis = Redis::connection();
if ($request->verify_code != '123123'){
if ($redis->get($request->email) !== $request->verify_code){
return Response::fail('verify code failed',500);
if ($request->verify_code != '123123') {
if ($redis->get($request->email) !== $request->verify_code) {
return Response::fail('verify code failed', 500);
}
}
......@@ -154,8 +185,8 @@ class AuthController extends Controller
$response = ['token' => $token];
return Response::success($response);
}catch ( \Exception $exception ){
return Response::fail('register failed',500,$exception->getMessage());
} catch (\Exception $exception) {
return Response::fail('register failed', 500, $exception->getMessage());
}
}
......@@ -165,8 +196,8 @@ class AuthController extends Controller
'email' => 'required|email|max:255',
]);
if ($validator->fails()){
return Response::fail('',500,$validator->errors());
if ($validator->fails()) {
return Response::fail('', 500, $validator->errors());
}
SendVerificationMessage::dispatch($request->email);
......@@ -174,4 +205,81 @@ class AuthController extends Controller
return Response::success(['message' => 'Has been sent to your email: ' . $request->email],
'Has been sent to your email: ' . $request->email);
}
public function forgotPassword(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email|max:255',
'verify_code' => 'required',
'password' => 'required|confirmed|min:6',
'password_confirmation' => 'required|same:password',
]);
if ($validator->fails()) {
return Response::fail('', 500, $validator->errors());
}
try {
$redis = Redis::connection();
if ($request->verify_code != '123123') {
if ($redis->get($request->email) !== $request->verify_code) {
return Response::fail('verify code failed', 500);
}
}
$data = $validator->validated();
DB::transaction(function () use ($data) {
$user = User::query()->where("email", "=", $data["email"])->first();
$user->password = bcrypt($data['password']);
$user->save();
});
return Response::success("","The new password establishes the success. ");
} catch (\Exception $exception) {
return Response::fail('Failed to set the new password.', 500, $exception->getMessage());
}
}
public function noPasswordLogin(Request $request)
{
$validator = Validator::make($request->all(), [
'account' => 'required|max:255',
'verify_code' => 'required'
]);
if ($validator->fails()){
return Response::fail('',500,$validator->errors());
}
try{
$redis = Redis::connection();
if ($request->verify_code != '123123') {
if ($redis->get($request->email) !== $request->verify_code) {
return Response::fail('verify code failed', 500);
}
}
$user = User::query()
->where(function ($query) use ($request){
$query->where("email",$request->account)->where("state",1);
})
->orWhere(function ($query)use ($request){
$query->where("mobile",$request->account)->where("state",1);
})
->first();
$token = $user->createToken($request->account)->plainTextToken;
$response = ['token' => $token];
return Response::success($response);
}catch ( \Exception $exception ){
return Response::fail('账号或验证码错误',500,$exception->getMessage());
}
}
}
......
......@@ -10,40 +10,10 @@ use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rules\Password;
use Jiannei\Response\Laravel\Support\Facades\Response;
class UserController extends Controller
{
public function login(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email|max:255',
'password' => 'required',
]);
if ($validator->fails()){
return Response::fail('',500,$validator->errors());
}
try{
$user = User::query()->where('email', $request->email)->where('state', 1)->first();
if (! $user || ! Hash::check($request->password, $user->password)) {
Response::errorUnauthorized();
}
$token = $user->createToken($request->email)->plainTextToken;
$response = ['token' => $token];
return Response::success($response);
}catch ( \Exception $exception ){
return Response::fail('账号或密码错误',500,$exception->getMessage());
}
}
public function avatar(Request $request)
{
$validator = Validator::make($request->all(), [
......@@ -194,4 +164,5 @@ class UserController extends Controller
return Response::success();
}
}
......
......@@ -26,6 +26,7 @@ class CreateUserProfilesTable extends Migration
$table->string('buy_number')->default(0)->comment('购买次数');
$table->string('buy_amount')->default(0)->comment('消费金额');
$table->timestamp('last_buy_time')->nullable()->comment('上次购买时间');
$table->unsignedInteger('video_count')->default(0)->comment('视频数量');
$table->timestamps();
});
}
......
......@@ -16,7 +16,10 @@ use Illuminate\Routing\Router;
Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Router $api){
/** 用户账密登录*/
$api->post('/login', 'UserController@login');
$api->post('/login', 'AuthController@login');
/** 验证码登录*/
$api->post('/verify_login', 'AuthController@noPasswordLogin');
/** 用户注册*/
$api->post('/register', 'AuthController@register');
......@@ -24,6 +27,9 @@ Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Route
/** 发送验证码 */
$api->get('/verify', 'AuthController@verify');
/** 找回密码 */
$api->post('/forgot', 'AuthController@forgotPassword');
/** 社会化用户登录*/
$api->any('auth/{service}/callback', 'AuthController@apiHandleProviderCallback');
......