🔏
Phoenix中文教程 | 和光同尘
  • Phoenix 中文入门教程
  • 00-prepare
    • Phoenix Framework 开发准备工作
  • 01-create-project
    • 创建 Phoenix 项目
  • 02-explore-phoenix
    • Phoenix 初体验
  • 03-project-menu
    • Menu 项目规划
  • 04-user-register
    • 注册用户
    • username 必填
    • username 已被人占用
    • username 只允许使用英文字母、数字及下划线
    • username 限定长度值
    • username 禁止使用 admin 等
    • email 规则
    • password 规则
    • 安全存储密码
    • 优化用户注册界面
  • 05-session
    • 登录
    • 注册成功自动登录
    • 退出登录
    • 登录/注册按钮
  • 06-restrict-access
    • 安全限制
  • 07-recipe
    • 生成菜谱样板文件
    • Recipe 属性开发
    • Recipe 控制器
    • 菜谱视图
    • 添加视频地址
由 GitBook 提供支持
在本页

这有帮助吗?

在GitHub上编辑
  1. 04-user-register

username 禁止使用 admin 等

为避免用户混淆,网站通常都会保留一系列用户名,不开放给普通用户使用,比如 admin、administrator,TvRecipe 项目里,我们将保留这两个用户名,禁止用户注册,如果有人尝试使用它们注册,则提示系统保留,无法注册,请更换。

我们从测试写起:

diff --git a/test/tv_recipe/users_test.exs b/test/tv_recipe/users_test.exs
index 26a7735..f70d4a1 100644
--- a/test/tv_recipe/users_test.exs
+++ b/test/tv_recipe/users_test.exs
@@ -65,4 +65,9 @@ defmodule TvRecipe.UserTest do
     changeset = User.changeset(%User{}, attrs)
     assert %{username: ["用户名最长 15 位"]} = errors_on(changeset)
   end
+
+  test "username should not be admin or administrator" do
+    assert %{username: ["系统保留,无法注册,请更换"]} = errors_on(%User{}, %{@valid_attrs | username: "admin"})
+    assert %{username: ["系统保留,无法注册,请更换"]} = errors_on(%User{}, %{@valid_attrs | username: "administrator"})
+  end
 end

然后是添加规则,照例还是在 user.ex 文件中:

diff --git a/lib/tv_recipe/users/user.ex b/lib/tv_recipe/users/user.ex
index 8c68e6d..35e4d0b 100644
--- a/lib/tv_recipe/users/user.ex
+++ b/lib/tv_recipe/users/user.ex
@@ -19,6 +19,7 @@ defmodule TvRecipe.User do
     |> validate_format(:username, ~r/^[a-zA-Z0-9_]+$/, message: "用户名只允许使用英文字母、数字及下划线")
     |> validate_length(:username, min: 3, message: "用户名最短 3 位")
     |> validate_length(:username, max: 15, message: "用户名最长 15 位")
+    |> validate_exclusion(:username, ~w(admin administrator), message: "系统保留,无法注册,请更换")
     |> unique_constraint(:username, name: :users_lower_username_index, message: "用户名已被人占用")
     |> unique_constraint(:email)
   end

再运行测试,悉数通过。

上一页username 限定长度值下一页email 规则

最后更新于1年前

这有帮助吗?

这里,我们用 来排除 中的两个用户名。

这样,我们就完成了所有 username 有关的规则,下一章,我们开始编写 。 s

上一章: 下一章:

validate_exclusion
~w(admin administrator) 数组
email 相关的规则
限制 username 的长度
email 相关的规则