依赖项是否可以在 elixir 中创建数据库 table?

Is it possible for a dependency to create a database table in elixir?

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

我已经按照 programming-phoenix-1.4 书中的步骤进行操作,并且很容易地设置了一个基本的身份验证系统。

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

基于此,我想知道是否可以将授权逻辑分离到它自己的应用程序中。

此身份验证模块需要:

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

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

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

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

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

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

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