【发布时间】:2021-01-04 07:20:32
【问题描述】:
我正在编写一个聊天通讯应用程序。 如果用户的唯一 id 以 Base 64 GUID 格式给出,则会抛出 bad_username 错误。
在这个文件中:https://pow.gs/mirror/ejabberd/-/blob/fd8e07af4789be362a61755ea47f216baeb64989/src/cyrsasl_scram.erl,有一种方法可以从用户名中删除==:
unescape_username(<<"">>) -> <<"">>;
unescape_username(EscapedUsername) ->
Pos = str:str(EscapedUsername, <<"=">>),
if Pos == 0 -> EscapedUsername;
true ->
Start = str:substr(EscapedUsername, 1, Pos - 1),
End = str:substr(EscapedUsername, Pos),
EndLen = byte_size(End),
if EndLen < 3 -> error;
true ->
case str:substr(End, 1, 3) of
<<"=2C">> ->
<<Start/binary, ",",
(unescape_username(str:substr(End, 4)))/binary>>;
<<"=3D">> ->
<<Start/binary, "=",
(unescape_username(str:substr(End, 4)))/binary>>;
_Else -> error
end
end
end.
我不知道为什么要写这个。如果我删除此特定代码,则连接工作正常。请告诉我为什么它被限制。
【问题讨论】:
标签: erlang ejabberd sasl ejabberd-saas