ChatGPT + SORA = CloseAI [005.3] Login之正式上线

ChatGPT + SORA = CloseAI [005.3] Login之正式上线

中间代码的载体:lumen
视频介绍:给AI处理逻辑找个地 lumen https://youtu.be/KTIV1c_XBr8

概述

ChatGPT + SORA = CloseAI [005.3] Login之正式上线

  • strapi 提供的数据的 CURD 操作
  • web 需要api进行用户名,密码验证,但是不能直接使用 strapi 的curd,应为数据操作接口不能直接暴露给前端,有安全问题
  • lumen 作为中间层,给web提供直接性的安全api,然后通过逻辑控制直接操作strapi的db

建立Controller

app/http/Controllers 目录下建立 User.php
定义一个login的api,如果成功返回token

// 定义一个登录接口,接收email和密码
  // 返回json,包含登录成功,token,用户信息
  public function login(Request $request)
  {
    $email = $request->input('email');
    $password = $request->input('password');  

    // password = md5(password + email)
    $password = md5($password . $email);
    $client = new Client(); 

    try {
      // 发送GET请求到外部API
      $response = $client->request('GET', env("DB_API").'my-users', [
        'query' => [
          'filters' => [
            'email' => [
              '$eq' => $email
            ]
          ]
        ]
      ]);  

      // 获取并解码响应体
      $data = json_decode($response->getBody()->getContents(), true);  

      // 如果没有找到用户,返回错误响应
      if (empty($data['data'])) {
        return response()->json([
          'success' => false,
          'message' => 'User not found'
        ]);
      }  

      // 获取用户信息,获取 id, email, password
      $user = $data['data'][0];
      // 检查密码是否匹配
      if ($user['attributes']['password'] ! $password) {
        return response()->json([
          'success' => false,
          'message' => 'Password is incorrect'
        ]);
      }  

      // 生成token
      $token = md5($user['id'] . $user['attributes']['email'] . time());
      // 更新用户的token
      $response = $client->request('PUT', env('DB_API').'my-users/' . $user['id'], [
        'json' => [
          'data' => [
            'last_token' => $token
          ]
        ]
      ]);  

      // 返回登录成功的响应
      return response()->json([
        'success' => true,
        'token' => $token,
        'user' => [
          'id' => $user['id'],
          'email' => $user['attributes']['email']
        ]
      ]);
    } catch (\Exception $e) {
      // 处理请求失败的情况
      return response()->json([
        'success' => false,
        'message' => $e->getMessage()
      ], 500);
    }
  }

web端调用

  1. 页面上的api操作先要映射回页面服务器

浏览器的安全机制,默认不能跨域调用

  1. myUserAPI.ts 调用上文login接口
export const loginAPI = async(email, password) => {
 try {
  // 使用axios调用 POST API, 参数为json格式
  const response = await axios.post('/api/login', {
   email,
   password
  }); 

  console.log(response.data); 

  // 返回API响应的数据
  return response.data;
 } catch (error) {
  return false
 }
};

总结

以上,完成了一个标准化的 登录流程,鼓掌!~

站内快搜



联系牛哥

加入牛哥的 TG 群组一起交流

=>>Telegram群组(点我加入)

有特殊情况的,需要单独沟通,可以添加牛哥的 微信 或者 Telegram