使用其他用户名进入MUC房间

时间:2018-10-30 09:08:41

标签: ejabberd

当我尝试使用另一个用户名进入房间时,我进入了使用其他用户名的房间。 喜欢 我的用户名是admin,当我发送此xml进入房间时 <presence to="roomname@conference.server.com/fakeuser" type="available"/> 然后“管理员”将以“假名”进入房间 如何禁止所有用户这样做,因此他们将只能在房间里输入真实姓名。

2 个答案:

答案 0 :(得分:0)

您不希望房间的占用者更改其昵称。房间可以选择禁止“访客”更改其昵称。

但是也许您也想禁止“参与者”:对此没有任何选择,但是可以修改ejabberd源代码并重新编译,请参见我在Remove some options from room config MUC中提供的第三个补丁

答案 1 :(得分:0)

此修补程序阻止昵称与用户名不同的存在节,并向用户返回错误:

diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl
index 492f9a4b3..3918401d1 100644
--- a/src/mod_muc_room.erl
+++ b/src/mod_muc_room.erl
@@ -342,6 +342,15 @@ normal_state({route, <<"">>, #iq{} = IQ}, StateData) ->
    true -> {stop, normal, StateData};
    false -> {next_state, normal_state, StateData}
     end;
+normal_state({route, Nick, #presence{from = From, lang = Lang} = Packet}, StateData)
+   when From#jid.luser /= Nick ->
+    ErrText = <<"It is not allowed to join the room with nickname different than username">>,
+    Err = xmpp:err_forbidden(ErrText, Lang),
+    ejabberd_router:route_error(Packet, Err),
+    case StateData#state.just_created of
+   true -> {stop, normal, StateData};
+   false -> {next_state, normal_state, StateData}
+    end;
 normal_state({route, Nick, #presence{from = From} = Packet}, StateData) ->
     Activity = get_user_activity(From, StateData),
     Now = p1_time_compat:system_time(micro_seconds),