This library lets you validate usernames against a blacklist. The blacklist data is based on the data from The-Big-Username-Blacklist and contains privilege, programming terms, section names, financial terms and actions.
You can try the blacklist using the tool Username checker.
The package can be installed by adding the_big_username_blacklist
to your list of dependencies in mix.exs
:
def deps do
[
{:the_big_username_blacklist, "~> 0.1.2"}
]
end
iex> TheBigUsernameBlacklist.valid?("tonystark")
true
iex> TheBigUsernameBlacklist.valid?("logout")
false
This is useful when there are existing routes or reserved words that you don't want to be a valid username.
iex> custom_blacklist = ["about-me", "contact-us"]
iex> TheBigUsernameBlacklist.valid?("about-me", custom_blacklist)
false
iex> TheBigUsernameBlacklist.valid?("brucewayne", custom_blacklist)
true
def create_user_changeset(%User{} = user, attrs \\ %{}) do
user
|> user_changeset(attrs)
|> validate_required([:email, :username, :first_name, :last_name])
|> validate_username()
end
defp validate_username(%{changes: %{username: username}} = changeset) do
if TheBigUsernameBlacklist.valid?(username) do
changeset
else
add_error(changeset, :username, "Invalid username.")
end
end
defp validate_username(changeset), do: changeset
For more info, check https://hexdocs.pm/the_big_username_blacklist.
The-Big-Username-Blacklist has been ported to different languages
MIT