php - 在 laravel 5.7 中手动设置身份验证内容
问题描述
我正在做一个laravel 5.7
项目,我想拥有自己的身份验证方案。
好吧,我会从我的用户那里给一个手机,然后给她一个one time pass
手机,然后检查她是否给了我正确的代码。
所以,我现在根本不使用 laravel 认证系统。
我的控制器是这样的:
/*
* Show Login Form
*/
public function showLoginForm()
{
return view('auth.custom.login');
}
/*
* Login
*/
public function login(Request $request)
{
$mobile = $request->mobile;
$this->validate($request, [
'mobile' => 'iran_mobile|required'
]);
$check = User::where('mobile', $mobile)->first();
if( $check === null )
{
Session::flash('toasterr', 'is not registered yet');
Session::put('mobile', $mobile);
return redirect(route('register'));
}
else
{
$singleTimePass = Str::random(4);
sendSms($mobile, 'your code:' . PHP_EOL . $singleTimePass . PHP_EOL . 'Insert that bla bla');
Session::put('singleTimePass', $singleTimePass);
Session::put('mobile', $mobile);
return redirect(route('check_pass'));
}
dd($check);
}
/*
* Show Check Pass page
*/
public function showCheckPass()
{
return view('auth.custom.pass');
}
/*
* Check Pass For Login
*/
public function checkPassForLogin(Request $request)
{
$this->validate($request, [
'pass' => 'required|regex:/^[\w-]*$/'
]);
if( $request->pass == Session::get('singleTimePass'))
{
$user = User::where('mobile', Session::get('mobile'))->first();
// dd($user->id);
Auth::login($user->id);
return redirect(route('game'));
}
else
{
Session::flash('toasterr', 'pass is wrong');
return redirect(route('check_pass'));
}
}
/*
* Show Register Form
*/
public function showRegisterForm()
{
return view('auth.custom.register');
}
/*
* Register
*/
public function register(Request $request)
{
$this->validate($request, [
'name' => 'persian_alpha|required',
'family' => 'persian_alpha|required',
'username' => 'required|min:4|max:255|string',
'mobile' => 'iran_mobile|required',
]);
return $request->all();
}
行!每件事似乎都很好,但现在,我希望 laravel 能给我提供Auth::check()
或Auth::user()
和......
所以我知道我在这一行有一个错误:Auth::login($user->id);
我想知道我怎样才能为提到的目标手动做这样的事情。
可能是因为我对 laravel 身份验证架构知之甚少,但如果你让我知道如何做到这一点,我将不胜感激,因为谷歌搜索了一段时间并且没有直接回答这个问题-or I did not searched enough-
。
解决方案
根据文档,登录方法需要一个用户对象来登录。所以你可以尝试
Auth::login($user);
// or
Auth::loginUsingId($user->id);
推荐阅读
- node.js - 如何在nodejs终端中检测shift + enter?
- github - 使用 GitHub 操作向问题添加自定义标签
- javascript - Tampermonkey console.log 似乎与 chrome 开发工具中的不一样
- sql - 比较 PostgreSQL 中的两个数组
- jmeter - 如何在分布式设置中将属性文件传递给 Jmeter 服务器
- javascript - 如何使悬停缩放效果仅适用于一个对象而不适用于所有对象?
- python - 按 A 分组 pyspark 数据帧,按 B 排序,然后选择 C 中的前 n 个不同条目
- flutter - 为什么我的测试在验证模拟函数时失败,即使它已经被调用?
- bootstrap-4 - 在 Bootstrap4-Table 上将一些 DataTable-columns 适合 content-width
- amazon-web-services - CloudFormation create_stack 需要参数