Changeset View
Changeset View
Standalone View
Standalone View
src/app/Http/Controllers/API/AuthController.php
- This file was added.
<?php | |||||
namespace App\Http\Controllers\API; | |||||
use App\Http\Controllers\Controller; | |||||
use App\User; | |||||
use Illuminate\Http\Request; | |||||
use Illuminate\Support\Facades\Auth; | |||||
use Illuminate\Support\Facades\Validator; | |||||
class AuthController extends Controller | |||||
{ | |||||
/** | |||||
* Get the authenticated User | |||||
* | |||||
* @return \Illuminate\Http\JsonResponse | |||||
*/ | |||||
public function info() | |||||
{ | |||||
$user = $this->guard()->user(); | |||||
$response = V4\UsersController::userResponse($user); | |||||
return response()->json($response); | |||||
} | |||||
/** | |||||
* Helper method for other controllers with user auto-logon | |||||
* functionality | |||||
* | |||||
* @param \App\User $user User model object | |||||
*/ | |||||
public static function logonResponse(User $user) | |||||
{ | |||||
$token = auth()->login($user); | |||||
return response()->json([ | |||||
'status' => 'success', | |||||
'access_token' => $token, | |||||
'token_type' => 'bearer', | |||||
'expires_in' => Auth::guard()->factory()->getTTL() * 60, | |||||
]); | |||||
} | |||||
/** | |||||
* Get a JWT token via given credentials. | |||||
* | |||||
* @param \Illuminate\Http\Request $request The API request. | |||||
* | |||||
* @return \Illuminate\Http\JsonResponse | |||||
*/ | |||||
public function login(Request $request) | |||||
{ | |||||
// TODO: Redirect to dashboard if authenticated. | |||||
$v = Validator::make( | |||||
$request->all(), | |||||
[ | |||||
'email' => 'required|min:2', | |||||
'password' => 'required|min:4', | |||||
] | |||||
); | |||||
if ($v->fails()) { | |||||
return response()->json(['status' => 'error', 'errors' => $v->errors()], 422); | |||||
} | |||||
$credentials = $request->only('email', 'password'); | |||||
if ($token = $this->guard()->attempt($credentials)) { | |||||
$sf = new \App\Auth\SecondFactor($this->guard()->user()); | |||||
if ($response = $sf->requestHandler($request)) { | |||||
return $response; | |||||
} | |||||
return $this->respondWithToken($token); | |||||
} | |||||
return response()->json(['status' => 'error', 'message' => __('auth.failed')], 401); | |||||
} | |||||
/** | |||||
* Log the user out (Invalidate the token) | |||||
* | |||||
* @return \Illuminate\Http\JsonResponse | |||||
*/ | |||||
public function logout() | |||||
{ | |||||
$this->guard()->logout(); | |||||
return response()->json([ | |||||
'status' => 'success', | |||||
'message' => __('auth.logoutsuccess') | |||||
]); | |||||
} | |||||
/** | |||||
* Refresh a token. | |||||
* | |||||
* @return \Illuminate\Http\JsonResponse | |||||
*/ | |||||
public function refresh() | |||||
{ | |||||
return $this->respondWithToken($this->guard()->refresh()); | |||||
} | |||||
/** | |||||
* Get the token array structure. | |||||
* | |||||
* @param string $token Respond with this token. | |||||
* | |||||
* @return \Illuminate\Http\JsonResponse | |||||
*/ | |||||
protected function respondWithToken($token) | |||||
{ | |||||
return response()->json( | |||||
[ | |||||
'access_token' => $token, | |||||
'token_type' => 'bearer', | |||||
'expires_in' => $this->guard()->factory()->getTTL() * 60 | |||||
] | |||||
); | |||||
} | |||||
/** | |||||
* Get the guard to be used during authentication. | |||||
* | |||||
* @return \Illuminate\Contracts\Auth\Guard | |||||
*/ | |||||
public function guard() | |||||
{ | |||||
return Auth::guard(); | |||||
} | |||||
} |