码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 搭建个人知识付费应用系统-(1)框架初始化、用户身份集成


    目录

    • 初始化项目
      • 配置
      • 安装依赖
      • 创建 Authing 用户池及应用
        • 登录接口
        • 注销接口
        • 登录回调 callback

    视频地址: https://www.bilibili.com/video/BV12d4y1R7bR/


    初始化项目

    Remix 官网:https://remix.run/

    创建命令:

    npx create-remix@latest
    
    • 1

    目前项目源码位于: https://github.com/willin/beta.willin.wang

    配置

    • eslint
    • prettier
    • editorconfig

    可选项:

    • lint-staged
    • husky

    安装依赖

    • tailwindcss
    • daisyui
    • @tailwindcss/typography
    • postcss
    • pm2

    创建 Authing 用户池及应用

    创建登录、注销接口

    登录接口

    import { redirect } from '@remix-run/node';
    
    export const loader = async () => {
      return redirect(
        `${process.env.AUTHING_SSO_URL}/login?app_id=${process.env.AUTHING_APP_ID}`
      );
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注销接口

    import { redirect } from '@remix-run/node';
    
    export const loader = async () => {
      return redirect(
        `${process.env.AUTHING_SSO_URL}/logout?redirectUri=${encodeURIComponent(
          process.env.HOMEPAGE || 'https://willin.wang'
        )}`
      );
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    登录回调 callback

    import { json, redirect } from '@remix-run/node';
    
    export type OidcResponse = {
      error?: string;
      error_description?: string;
    
      access_token: string;
      expires_in: number;
      id_token: string;
      scope: string;
      token_type: string;
    };
    
    export const loader = async ({ request }) => {
      const url = new URL(request.url);
      const code = url.searchParams.get('code');
      if (code === null) {
        return redirect('/login');
      }
    
      const body = {
        client_id: process.env.AUTHING_APP_ID,
        client_secret: process.env.AUTHING_APP_SECRET,
        grant_type: 'authorization_code',
        code
      };
    
      const formBody = [];
      // eslint-disable-next-line
      for (const property in body) {
        const encodedKey = encodeURIComponent(property);
        // eslint-disable-next-line @typescript-eslint/ban-ts-comment
        // @ts-ignore
        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
        const encodedValue = encodeURIComponent(body[property]);
        formBody.push(`${encodedKey}=${encodedValue}`);
      }
      const res = await fetch(`${process.env.AUTHING_APP_DOMAIN}/oidc/token`, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
        },
        body: formBody.join('&')
      });
    
      const oidcToken = (await res.json()) as OidcResponse;
      if (oidcToken.error) {
        console.error(oidcToken);
        return redirect('/login');
      }
      // 以上获取 oidc token 为核心部分
      
      // 下面根据业务需要去操作其他
      const resInfo = await fetch(
        `${process.env.AUTHING_APP_DOMAIN}/oidc/me?access_token=${oidcToken.access_token}`
      );
      // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
      const user = await resInfo.json();
      return json(user);
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
  • 相关阅读:
    ArcgisPro3.0.1中文安装包下载及安装教程
    day13_异常
    数字化转型背景下企业知识管理能力提升路径
    35岁程序员被裁员,这半年他的故事
    AI绘画:如何让图片开口说话生成视频?变现渠道有哪些?
    C++ partition()和stable_partition()函数用法详解(深入了解,一文学会)
    华为机试题:HJ5 进制转换
    LeetCode844. 比较含退格的字符串
    基于蚁群优化算法的直流电机模糊PID控制(Matlab实现)
    wsl使用vscode连接,远程安装C/C++ 拓展时,报错
  • 原文地址:https://blog.csdn.net/jslygwx/article/details/126432947
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号