Flarum 核心代码是不支持英文或数字以外的用户名的,因此我们需要修改核心代码。
[dwarning title=警告 font=darkorange bg=#fff8c4 border=darkorange]强烈不建议修改核心代码!升级 Flarum 后,修改的代码会被覆盖还原。另外,已经有人提交了 PR 让原生 Flarum 支持 Unicode 用户名,如果您有很强大的耐心(逃 ,可以等等试试看 😂[/dwarning]
### 一共两个选择,一个是选择仅支持中英文用户名,另一个是支持 Unicode 用户名(含 CJK 字符)。
无论你选择哪种,都要经历三个过程:允许注册 -> 允许艾特 -> 允许 URL。
我们先来谈谈如何支持 Unicode 用户名,只想支持中英文用户名的话,请移步二楼。
# 选择一(支持 Unicode 用户名)
1. 允许注册 CJK 用户名
文件 /vendor/flarum/core/src/User/UserValidator.php
- 将 47 行的
'regex:/^[a-z0-9_-]+$/i'
替换为(三个方案选一个)
// 1. CJK基础上,不允许全数字用户名出现,防止个人主页报错。
'regex:/^[-_a-zA-Z0-9\x7f-\xff]*[-_a-zA-Z\x7f-\xff][-_a-zA-Z0-9\x7f-\xff]*$/i',
// 2. CJK基础上,允许全数字用户名
'regex:/^[-_a-zA-Z0-9\x7f-\xff]+$/i',
// 3. Unicode 用户名
'alpha_dash'
别把行尾的半角逗号忘了。
文件 /vendor/flarum/core/src/Forum/Auth/Registration.php
- 将 101 行
$username = preg_replace('/[^a-z0-9-_]/i', '', $username);
注释掉,
也就是改成 // $username = preg_replace('/[^a-z0-9-_]/i', '', $username);
2. 允许@艾特 CJK 用户名。
文件 /vendor/flarum/mentions/src/ConfigureMentions.php
3. 增加 API URL CJK 编码转换支持。(很多时候点击 CJK/Unicode 用户链接提示“找不到此资源”就是这个问题)
文件 /vendor/flarum/core/src/Api/Controller/ShowUserController.php
- Beta13 及以下
- 将 52 行的
getIdForUsername($id)
替换为 getIdForUsername(urldecode($id))
。
- Beta14 及以上
- 将 62 和 64 行的
$id
改为 urldecode($id)
- 稳定版
- 63 行
fromSlug($id, $actor)
改为 fromSlug(urldecode($id), $actor)
4. 清除缓存,必须有这一步!
- 终端运行
php flarum cache:clear
或其他方式。