A.B*_*per 5 php session laravel laravel-5.5
要在 larvel 5.5 和通过dingo包创建双因素 SMS 验证,我遵循以下简化的工作流程:
首先检查 isTwoFactorActive 在您的登录功能中是真还是假,如果它是真的发送短信并给出响应以获取收到的短信代码。如果为false则直接返回token。
Route::post('auth/login', function () {
$credentials = Input::only('email', 'password');
if ( ! $token = JWTAuth::attempt($credentials) )
{
// return the 401 response
return Response::json(['error' => 'invalid_credentials'], 401);
}
if(Auth::user()->isTwoFactorActive) {
$code = rand(1000,9999); //generate sms code
$send_sms = SendSMS($code,Auth::user()->phone); //write your own code here to send SMS to user mobile
$data= collect(array('sms_code'=>$code,'token'=>$token)); // save sms_code and token in an array
Session::push(Auth::user()->id, $data); // save array into session.
return Response::json(array('login_status'=>'success','user_id'=>Auth::user()->id,'sms_required'=>'yes'));
} else {
return Response::json(array('login_status'=>'success','token'=>$token));
}
});
Run Code Online (Sandbox Code Playgroud)
现在在前端检查响应是否存在令牌,然后继续显示主页或显示输入 SMS 代码屏幕并在表单中捕获 SMS 代码,然后再次将详细信息发布到此 API。
Route::post('sms/verification', function () {
$user_id = Request::input('user_id');
$code= Request::input('code');
$data = Session::get($user_id);
if($data->sms_code == $code) {
return Response::json(array('status'=>'success','token'=>$data->token));
} else {
return Response::json(array('status'=>'failed','msg'=>'Invalid sms code!'));
}
});
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用 session 来存储创建的令牌,以便在成功的两因素授权后发送它。但似乎我们不能在 Laravel 和 API 中使用 session。
在这种情况下我该怎么办?
小智 8
我正在使用 Laravel 8,这些更改对我来说非常有效:
找到您的App\Http\Kernel.php并对$middlewareGroups的'api'保护值进行以下更改:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
Run Code Online (Sandbox Code Playgroud)
Laravel API 默认设置不包括会话。但我相信你可以手动添加它们。这是我很快找到的链接。 Laravel 5.3 - 如何在没有 CSRF 的情况下将会话添加到“API”?
但是 Laravel会话和中间件文档也可能有用。
| 归档时间: |
|
| 查看次数: |
19488 次 |
| 最近记录: |