使用 mongodb 时如何对 API 进行 Laravel 身份验证?
how to do Laravel authentication for API when using mongodb?
我使用 Laravel、Vue.js 和 MongoDB 创建了一个网络应用程序,我确实以这种方式登录,
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Hash;
use App\User;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
public function login(Request $request)
{
$this->validate($request, [
'email' => 'required|email',
'password' => 'required|between:6,25'
]);
$user = User::where('email', $request->email)
->first();
if($user && Hash::check($request->password, $user->password)) {
// generate new api token
$user->api_token = str_random(60);
$user->save();
Auth::login($user, $remember = true);
return response()
->json([
'authenticated' => true,
'api_token' => $user->api_token,
'user_id' => $user->_id,
'name' => $user->name
]);
}
return response()
->json([
'email' => ['Provided email and password does not match!']
], 422);
}
现在,当我尝试从其他控制器中的 Auth::user() 或 $request->user() 获取经过身份验证的用户时,我得到 null。我想我应该使用 token_api 从数据库中检索用户,但我认为这不安全。但是,我刚刚开始学习 Laravel 和 Vue.js 所以如果有更好的方法,我将不胜感激。
不确定,但我认为您没有以这种方式使用正确的授权 guard
驱动程序,守卫应该是 token
请检查配置文件夹中的 auth.php
文件并像下面这样设置在 guards
数组
上
'api' => [
'driver' => 'token',
'provider' => 'users',
]
使用 Auth::guard('api')->user()
和 Auth::guard('api')->login($user)
检查并设置此守卫的身份验证
我使用 Laravel、Vue.js 和 MongoDB 创建了一个网络应用程序,我确实以这种方式登录,
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Hash;
use App\User;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
public function login(Request $request)
{
$this->validate($request, [
'email' => 'required|email',
'password' => 'required|between:6,25'
]);
$user = User::where('email', $request->email)
->first();
if($user && Hash::check($request->password, $user->password)) {
// generate new api token
$user->api_token = str_random(60);
$user->save();
Auth::login($user, $remember = true);
return response()
->json([
'authenticated' => true,
'api_token' => $user->api_token,
'user_id' => $user->_id,
'name' => $user->name
]);
}
return response()
->json([
'email' => ['Provided email and password does not match!']
], 422);
}
现在,当我尝试从其他控制器中的 Auth::user() 或 $request->user() 获取经过身份验证的用户时,我得到 null。我想我应该使用 token_api 从数据库中检索用户,但我认为这不安全。但是,我刚刚开始学习 Laravel 和 Vue.js 所以如果有更好的方法,我将不胜感激。
不确定,但我认为您没有以这种方式使用正确的授权 guard
驱动程序,守卫应该是 token
请检查配置文件夹中的 auth.php
文件并像下面这样设置在 guards
数组
'api' => [
'driver' => 'token',
'provider' => 'users',
]
使用 Auth::guard('api')->user()
和 Auth::guard('api')->login($user)