このリポジトリは2023-09-09にアーカイブされています。 ファイルの閲覧とクローンは可能ですが、プッシュ、イシューの作成、プルリクエストはできません。
076server/app/Http/Controllers/AuthController.php

141 行
4.5 KiB
PHP
Raw 通常表示 履歴

<?php
namespace App\Http\Controllers;
2018-02-09 01:17:45 +09:00
use Illuminate\Http\Request;
2018-02-13 21:29:58 +09:00
use App\User;
use JWTAuth;
2018-02-09 01:17:45 +09:00
use Tymon\JWTAuth\Exceptions\JWTException;
2018-02-13 21:29:58 +09:00
use Validator;
use DB, Hash, Mail, Illuminate\Support\Facades\Password;
class AuthController extends Controller {
/**
* API Register
*
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function register(Request $request) {
$credentials = $request->only('username', 'password');
$rules = [
'username' => 'required|max:255|unique:users',
'email' => 'required|email|max:255|unique:users',
];
$validator = Validator::make($credentials, $rules);
if($validator->fails()) {
return response()->json(['success'=> false, 'error'=> $validator->messages()]);
}
2018-02-07 23:19:05 +09:00
2018-02-13 21:29:58 +09:00
$username = $request->username;
$email = $request->email;
$password = $request->password;
2018-02-15 22:43:45 +09:00
$country = $request->country;
$gender = $request->gender;
User::create([
'username' => $username,
'email' => $email,
'password' => Hash::make($password),
'country' => $country,
'gender' => $gender
]);
2018-02-13 21:29:58 +09:00
return $this->login($request);
}
/**
* API Login, on success return JWT Auth token
*
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
2018-02-09 01:17:45 +09:00
public function login(Request $request) {
$credentials = $request->only('username', 'password');
2018-02-13 21:29:58 +09:00
$rules = [
'username' => 'required',
'password' => 'required',
];
$validator = Validator::make($credentials, $rules);
if($validator->fails()) {
return response()->json(['success'=> false, 'error'=> $validator->messages()]);
}
2018-02-09 01:17:45 +09:00
try {
2018-02-13 21:29:58 +09:00
// attempt to verify the credentials and create a token for the user
if (!$token = JWTAuth::attempt($credentials)) {
return response()->json(['success' => false, 'error' => 'We cant find an account with this credentials.'], 401);
2018-02-09 01:17:45 +09:00
}
}
2018-02-13 21:29:58 +09:00
catch (JWTException $e) {
// something went wrong whilst attempting to encode the token
return response()->json(['success' => false, 'error' => 'Failed to login, please try again.'], 500);
}
// all good so return the token
return response()->json(['success' => true, 'data'=> [ 'token' => $token ]]);
2018-02-09 01:17:45 +09:00
}
2018-02-13 21:29:58 +09:00
/**
* Log out
* Invalidate the token, so user cannot use it anymore
* They have to relogin to get a new token
*
* @param Request $request
*/
public function logout(Request $request) {
$this->validate($request, ['token' => 'required']);
2018-02-09 01:17:45 +09:00
try {
2018-02-13 21:29:58 +09:00
JWTAuth::invalidate($request->input('token'));
2018-02-13 22:20:18 +09:00
return response()->json(['success' => true, 'message'=> 'You have successfully logged out.']);
2018-02-13 21:29:58 +09:00
} catch (JWTException $e) {
// something went wrong whilst attempting to encode the token
return response()->json(['success' => false, 'error' => 'Failed to logout, please try again.'], 500);
2018-02-09 01:17:45 +09:00
}
2018-02-07 23:19:05 +09:00
}
2018-02-13 21:29:58 +09:00
/**
* API Recover Password
*
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function recover(Request $request) {
$user = User::where('email', $request->email)->first();
if (!$user) {
$error_message = "Your email address was not found.";
return response()->json(['success' => false, 'error' => ['email'=> $error_message]], 401);
}
2018-02-09 01:17:45 +09:00
try {
2018-02-13 21:29:58 +09:00
Password::sendResetLink($request->only('email'), function (Message $message) {
$message->subject('Your Password Reset Link');
});
} catch (\Exception $e) {
$error_message = $e->getMessage();
return response()->json(['success' => false, 'error' => $error_message], 401);
2018-02-09 01:17:45 +09:00
}
2018-02-07 23:19:05 +09:00
2018-02-13 21:29:58 +09:00
return response()->json([
'success' => true, 'data'=> ['message'=> 'A reset email has been sent! Please check your email.']
]);
}
2018-02-07 23:19:05 +09:00
2018-02-13 21:29:58 +09:00
public function checkAuth(Request $request) {
$this->validate($request, ['token' => 'required']);
2018-02-09 01:17:45 +09:00
2018-02-13 21:29:58 +09:00
try {
$res = JWTAuth::parseToken()->authenticate();
return response()->json(['success' => true, 'user_id' => $res->id]);
} catch (JWTException $e) {
2018-02-13 22:23:34 +09:00
return response()->json(['success' => false, 'error' => 'Failed to check, please try again.'], 500);
2018-02-09 01:17:45 +09:00
}
2018-02-07 23:19:05 +09:00
}
}
?>