【问题标题】:Use sessions in laravel APIs在 laravel API 中使用会话
【发布时间】:2018-05-09 00:17:46
【问题描述】:

要在 larvel 5.5 中通过dingo 包创建双因素短信验证,我遵循以下简化的工作流程:

首先检查 isTwoFactorActive 在您的登录功能中是 true 还是 false,如果它是 true 发送 SMS 并给出响应以获取接收到的 SMS 代码。如果是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));

    }
});

现在在前端检查响应是否存在令牌,然后继续显示主页或显示输入短信代码屏幕并在表单中捕获短信代码,然后再次将详细信息发布到此 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!'));

   }
});

如您所见,我使用 session 来存储创建的令牌,以便在成功的两因素授权后发送它。但似乎我们不能在 laravel 和 API 中使用 session。

在这种情况下我该怎么办?

【问题讨论】:

  • 保存在另一个令牌中!或者实现与访问令牌相关的数据库会话。另一个注意事项:尝试在生产中实现另一种方式来生成mt_rand(1000,9999)以外的代码。
  • 我检查双因素验证是否正常?我现在真的不知道应该使用哪种方法来创建 2factor SMS 验证。
  • 确实,我之前没有实现过这样的验证。但是,即使在普通应用程序中,我们也不会在注册验证中使用会话。使用用户的电话号码和发送的密钥组合来验证更可靠。换句话说,电话号码和组合键将形成另一个唯一的访问令牌来验证用户。
  • 另外,如果您注意到,在 Laravel 用户表中,可以找到两个令牌字段。

标签: php laravel session laravel-5.5


【解决方案1】:

Laravel API 默认设置不包括会话。但我相信您可以手动添加它们。这是我很快找到的链接。 Laravel 5.3 - How to add Sessions to `API` without CSRF?

但是 SessionsMiddleware 的 Laravel 文档也可能有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 2022-10-21
    • 2017-11-08
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    相关资源
    最近更新 更多