Php 在同一项目Laravel 7中实现两个AuthController(web和api)时照亮\Auth\AuthenticationException
我创建了一个Laravel应用程序。它可以通过web访问,用于管理员的web页面,以及用于用户页面的api。我使用Vue创建了用户页面,所以它需要API。 这样做,我需要两个身份验证控制器。一个是使用laravel脚手架为web自动创建的。另一个是手动创建的,供用户通过令牌登录。 我确实为API创建了AuthController。这是控制器Php 在同一项目Laravel 7中实现两个AuthController(web和api)时照亮\Auth\AuthenticationException,php,laravel,Php,Laravel,我创建了一个Laravel应用程序。它可以通过web访问,用于管理员的web页面,以及用于用户页面的api。我使用Vue创建了用户页面,所以它需要API。 这样做,我需要两个身份验证控制器。一个是使用laravel脚手架为web自动创建的。另一个是手动创建的,供用户通过令牌登录。 我确实为API创建了AuthController。这是控制器 <?php namespace App\Http\Controllers\API; use App\Http\Controllers\Contr
<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use App\User;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
//untuk login
public function login(Request $request)
{
//validasi data
$this->validate($request, [
'email' => 'email',
'username' => 'string',
'password' => 'required'
]);
//login dapat menggunakan email atau username
$user = User::where('email', '=', $request->email)
->orWhere('username', '=', $request->username)->first();
// $username = User::where('username', $request->username)->first();
// dd($username);
$status = "error";
$message = "";
$data = null;
$code = 401;
// echo (gettype($email));
// echo(gettype($username));
// echo($email);
if($user){
if (Hash::check($request->password, $user->password)){
$user->generateToken(); //generated 60 random string
$status = 'success';
$message = 'Login Success';
//tampilkan data user menggunakan method to Array
$data = $user->toArray();
$code = 200;
}
else{
$message = "Login gagal, password salah";
}
}
else {
$message = "Login gagal, username atau email salah";
}
return response()->json([
'status' => $status,
'message' => $message,
'data' => $data,
], $code);
}
//untuk registrasi
public function register(Request $request)
{
$validator = Validator::make($request->all(),
[
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6',
'username' => 'string'
]);
if ($validator->fails()){
$errors = $validator->errors();
return response()->json([
'data' => [
'message' => $errors,
]
],400);
}
else{
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
'username' => $request->username,
'roles' => json_encode(['CUSTOMER'])
]);
if ($user){
$user->generateToken();
$status = "success";
$message = "Register berhasil!";
$data = $user->toArray();
$code = 200;
}
else{
$message = "Register gagal";
}
return response()->json([
'status' => $status,
'message' => $message,
'data' => $data
], $code);
}
}
//untuk logout
public function logout(Request $request)
{
//get authenticated user data
$user = Auth::user();
if($user){
$user->api_token = null; //delete user's token
$user->save();
}
return response()->json([
'status' => 'success',
'message' => 'logout success,
'data' => null,
], 200);
}
}
注销方法响应:
{
"status": "error",
"message": "Unauthenticated.",
"data": null,
"errors": {
"exception": "Illuminate\\Auth\\AuthenticationException",
"trace": [
"#0 D:\\xampp\\htdocs\\book-store\\vendor\\laravel\\framework\\src\\Illuminate\\Auth\\Middleware\\Authenticate.php(68): Illuminate\\Auth\\Middleware\\Authenticate->unauthenticated(Object(Illuminate\\Http\\Request), Array)"
]
}
}
谢谢你的时间和考虑
config\auth.php
//Routing bersifat publik
Route::prefix('v1')->group(function (){
Route::post('login', 'API\AuthController@login');
Route::post('register', 'API\AuthController@register');
Route::get('books', 'API\ApiBookController@index');
Route::get('book/{id}', 'API\ApiBookController@view')
->where('id', '[0-9]+');
Route::resource('categories', 'API\ApiCategoryController')
->except(['create', 'update']);
//Routing bersifat private
Route::middleware('auth:api')->group(function (){
Route::post('logout', 'API\AuthController@logout');
});
});
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],
*注意:config\auth.php
中的默认保护是web
,因此我可以登录到web。使用auth-guard
$user=Auth::guard('api')->user();
您必须在apiController中指定应该在控制器中注销的用户 你应该改变
$user = Auth::user();
到
然后注销他。这个答案是最符合逻辑的方法,但我仍然会遇到同样的错误。你能在这里给出auth.phpi添加的auth.php吗@奥马尔_sharif@Vinotaz为什么不使用passport包来处理这个问题呢?我想先创建一个简单的包,以便学习purpose@Vinotaz在登录函数中,您根本不验证用户。只需为他生成令牌。@alirezadp10我之前已经给出了答案。.为什么需要添加相同的令牌answer@alirezadp10如何授权?
$user = Auth::guard('api')->user();;