【问题标题】:Is it possible for a dependency to create a database table in elixir?依赖项是否可以在 elixir 中创建数据库表?
【发布时间】:2019-08-10 10:55:32
【问题描述】:

我正在尝试在 elixir/phoenix 中构建一个简单的身份验证系统,该系统可以用作任何 phoenix 应用程序的依赖项。

我已按照programming-phoenix-1.4 书中的步骤进行操作,并且非常轻松地设置了基本的身份验证系统。

在本书中,他们讨论了将用户敏感信息和非敏感信息分离到应用程序和数据库中的不同位置。所有非敏感信息(用户名、姓名等)都放在users 表中,而敏感信息(电子邮件、密码等)则放在credentials 表中。

基于此,我想知道是否可以将身份验证逻辑分离到自己的应用程序中。

此身份验证模块需要:

  1. 在需要的应用程序的数据库中创建credentials
  2. 根据从父应用传递的信息更新所述表
  3. 包含一个能够从父应用程序更新connauth plug(例如,使用assign 函数将:current_user 添加到conn

不幸的是,我现在正处于第一个障碍。我不确定是否有可能需要一个可以创建数据库表的模块。

我想如果第 1 步可行,第 2 步将很简单。第 3 步看起来可以通过 Router.forward/4 函数实现。

【问题讨论】:

  • 我不确定那本书提到了什么,但我几乎不明白原因或将用户信息分成两个单独的表格。另外,你提出的这个模块如何比经过实战证明的Guardian更好?
  • @AlekseiMatiushkin 非常感谢您的回复(以及您对长生不老药问题的所有其他回复)。我主要将其用作学习经验,并想知道我是否可以建立这个想法。我认为这将有助于在我根据编程 phx 1.4 的课程构建的任何应用程序中创建一个简单的注册/登录/注销流程。我的目标不是构建我会在“真实”项目中使用 Guardian 之类的东西。

标签: elixir metaprogramming phoenix-framework ecto


【解决方案1】:

可以通过为依赖项指定 repo 模块的名称来实现。这方面的一个例子是GuardianDB,它创建一个表来存储有效令牌。 GuardianDB 的配置如下所示:

config :guardian, Guardian.DB,
  repo: MyApp.Repo,
  # default
  schema_name: "guardian_tokens",
  # default: 60 minutes
  sweep_interval: 60

您可以使用该库作为指南github

至于创建插件,Guardian 也是 Elixir 的身份验证库。你可以找到代码here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    相关资源
    最近更新 更多