如何在 Laravel 中验证没有数据库的用户?
How to authenticate user without a DB in Laravel?
我在 Laravel 中创建了一个新项目,它使用了 API 中的所有数据。对于用户配置文件等私人数据,我需要访问令牌才能获取数据。
获得访问令牌后,如何将令牌设置为 Laravel 中的 Auth::id()
?或者我可以将用户配置文件存储为 Auth::user()
,以便我可以在前端 blade 文件中使用 @auth
?
class CustomAuthController extends Controller
{
public function index()
{
return view('login');
}
public function store(Request $request)
{
$request->validate([
'phone' => 'required|numeric'
]);
$data = [
'phone' => $request->phone
];
$codeSent = GeneralFunction::WebRequestPublicApi('first-login', $data, null, null, null, true);
if($codeSent->status == "success")
{
return redirect('verify');
} else {
$errors = new MessageBag();
$errors->add("phone", "Invalid phone number");
return view('login')->withErrors($errors);
}
}
public function showVerify()
{
return view('verify');
}
public function verify(Request $request)
{
try {
$request->validate([
'verify' => 'required|size:6'
]);
$data = [
'token_code' => $request->verify,
'source' => 'web'
];
$token = GeneralFunction::WebRequestPublicApi('verify-login', $data, null, null, null, true);
if($token->status === "success")
{
$userData = GeneralFunction::WebRequestPublicApi('membership', null, 'GET', null, null, true, $token->results->access_token);
if($userData->status !== "error")
{
$user = (array) $userData->results[0];
$request->session()->put('token', $token->results->access_token);
Auth::attempt($user, false, false);
return redirect('/');
}
} else {
$errors = new MessageBag();
$errors->add("verify", "Invalid Token");
return view('verify')->withErrors($errors);
}
} catch (Exception $e) {
$errors = new MessageBag();
$errors->add("verify", $e->getMessage());
return view('verify')->withErrors($errors);
}
}
}
我尝试使用 Auth::attempt,
Auth::login(),
和其他方法,但所有这些都需要用户 table。我的项目没有数据库。
您可以执行以下操作。
在控制器中
if($auth_ok)
{
session(['user' => ['key' => 'value', 'key2' => 'value2'] ]); // set session data
return view('frontend');
}
在视图中
$user = session('user', false);
@if(!$user) // if not logged in
do something
@else // logged in successfully
Welcome my user
@endif
希望对您有所帮助。
我猜你需要做的最好的事情就是使用 sqlite,一旦你从你的 api 登录并从中创建一个新用户,或者查找是否已经存在并且 Auth::login($newUser);
我在 Laravel 中创建了一个新项目,它使用了 API 中的所有数据。对于用户配置文件等私人数据,我需要访问令牌才能获取数据。
获得访问令牌后,如何将令牌设置为 Laravel 中的 Auth::id()
?或者我可以将用户配置文件存储为 Auth::user()
,以便我可以在前端 blade 文件中使用 @auth
?
class CustomAuthController extends Controller
{
public function index()
{
return view('login');
}
public function store(Request $request)
{
$request->validate([
'phone' => 'required|numeric'
]);
$data = [
'phone' => $request->phone
];
$codeSent = GeneralFunction::WebRequestPublicApi('first-login', $data, null, null, null, true);
if($codeSent->status == "success")
{
return redirect('verify');
} else {
$errors = new MessageBag();
$errors->add("phone", "Invalid phone number");
return view('login')->withErrors($errors);
}
}
public function showVerify()
{
return view('verify');
}
public function verify(Request $request)
{
try {
$request->validate([
'verify' => 'required|size:6'
]);
$data = [
'token_code' => $request->verify,
'source' => 'web'
];
$token = GeneralFunction::WebRequestPublicApi('verify-login', $data, null, null, null, true);
if($token->status === "success")
{
$userData = GeneralFunction::WebRequestPublicApi('membership', null, 'GET', null, null, true, $token->results->access_token);
if($userData->status !== "error")
{
$user = (array) $userData->results[0];
$request->session()->put('token', $token->results->access_token);
Auth::attempt($user, false, false);
return redirect('/');
}
} else {
$errors = new MessageBag();
$errors->add("verify", "Invalid Token");
return view('verify')->withErrors($errors);
}
} catch (Exception $e) {
$errors = new MessageBag();
$errors->add("verify", $e->getMessage());
return view('verify')->withErrors($errors);
}
}
}
我尝试使用 Auth::attempt,
Auth::login(),
和其他方法,但所有这些都需要用户 table。我的项目没有数据库。
您可以执行以下操作。
在控制器中
if($auth_ok)
{
session(['user' => ['key' => 'value', 'key2' => 'value2'] ]); // set session data
return view('frontend');
}
在视图中
$user = session('user', false);
@if(!$user) // if not logged in
do something
@else // logged in successfully
Welcome my user
@endif
希望对您有所帮助。
我猜你需要做的最好的事情就是使用 sqlite,一旦你从你的 api 登录并从中创建一个新用户,或者查找是否已经存在并且 Auth::login($newUser);