2014-09-11 2 views
1

그래서 작은 자바 스크립트/Strophejs xmpp 클라이언트가 ejabberd 서버에 연결합니다. 지금까지 ejabberd 웹 관리자에서 사용자를 만들었습니다. 사용자 [email protected]과 사용자 [email protected]을 만들었습니다.XMPP 대역 내 등록 (XEP-0077) : 간단한 jid/pw 로그인과 다릅니다. 단계는 무엇입니까?

내 고객은 이러한 기존 계정 중 하나에 로그인하고 이러한 계정/사용자간에 메시지를 보내는 것을 지원합니다.

그러나 사용자가 원하는 jid 및 비밀번호를 입력하는 HTML 양식에서 서버에 사용자를 생성하는 기능을 선호합니다.

xmpp에서이를 인 밴드 등록 (http://xmpp.org/extensions/xep-0077.html)이라고합니다.

$(document).bind('connect', function (ev, data) { 
console.log('connect fired'); 
var conn = new Strophe.Connection("http://bosh.metajack.im:5280/xmpp-httpbind"); 
conn.connect(data.jid, data.password, function (status) { 
    console.log('callback being done'); 
    if (status === Strophe.Status.CONNECTED) { 
     alert('connected!'); 
     $(document).trigger('connected'); 
     alert('Connected successfully'); 
    } else if (status === Strophe.Status.DISCONNECTED) { 
     $(document).trigger('disconnected'); 
    } 
    else 
    { 
     Hello.log("error"); 
     console.log('error'); 
    } 
}); 

Hello.connection = conn; 
}); 

즉 :

$(document).ready(function() { 
$('#SignIn').bind('click', function() { 
    $(document).trigger('connect', { 
            jid: $('#LogineMail').val(), password: $('#LoginPassword_f').val() 
            } 
         ); 
         }); 
}); 

그래서, 위의 코드를 다음과 같이 보이는, '연결'트리거 :

지금, 여기에 기본 시나리오는 기존 계정에 사용자가 로그인 할 때입니다 , 이것은 새로운 Strophe.connection을 만들고 제공된 jid와 암호로 로그인합니다. 그러면 메시지를 보낼 수 있습니다.

그러나 인 밴드 등록의 상황은 약간 다릅니다.

3.1 Entity Registers with a Host

In order to determine which fields are required for registration with a host, an entity SHOULD first send an IQ get to the host. The entity SHOULD NOT attempt to guess at the required fields by first sending an IQ set, since the nature of the required data is subject to service provisioning.

Example 1. Entity Requests Registration Fields from Host

<iq type='get' id='reg1' to='shakespeare.lit'> 
    <query xmlns='jabber:iq:register'/> 
</iq> 

이 난 이후, 아이큐 요청을 보내, 나는 사용자로 서버에 로그인하고 전에 응답을받을 수 있어야한다는 것을 의미 : 것을 XEP-0077 주 분명히, 서버에서 계정을 요청하는 사용자 인 경우 서버에 아직 계정이 없기 때문에 jid/password 콤보로 로그인 할 수 없습니다.

어떻게 해결할 수 있습니까? 인바운드 등록을 위해 연결 및 스탠자를 보내는 것과 관련된 일반적인 단계는 무엇입니까? 예를 들어 서버에 일종의 관리자 계정이 있어야합니까? 그러면 새 사용자를 추가 할 때 코드에서 로그인 한 다음이 관리자 계정을 사용하여 대역 내 등록에 필요한 요구 사항/필드를 얻고 등록하십시오. 새로운 사용자? 또는 좋은/표준 접근 방식은 무엇입니까?

감사와 안부,

크리스

편집 : 난 그냥 내가 지금 사용하려고하고있는 strophe.register.js 플러그인을 발견했다. 그러나 strophe.register.js 코드에서 오류가 발생합니다.

이 내 코드를 등록하는 모습입니다 :

$('#JoinSend').bind('click', function() { 
    var tempConn = new Strophe.Connection("http://bosh.metajack.im:5280/xmpp-httpbind"); 
    tempConn.register.connect("testserver.host56.com", function (status) { 
     if (status === Strophe.Status.REGISTER) { 
      // fill out the fields 
      connection.register.fields.username = "juliet"; 
      connection.register.fields.password = "R0m30"; 
      // calling submit will continue the registration process 
      connection.register.submit(); 
     } else if (status === Strophe.Status.REGISTERED) { 
      console.log("registered!"); 
      // calling login will authenticate the registered JID. 
      connection.authenticate(); 
     } else if (status === Strophe.Status.CONFLICT) { 
      console.log("Contact already existed!"); 
     } else if (status === Strophe.Status.NOTACCEPTABLE) { 
      console.log("Registration form not properly filled out.") 
     } else if (status === Strophe.Status.REGIFAIL) { 
      console.log("The Server does not support In-Band Registration") 
     } else if (status === Strophe.Status.CONNECTED) { 
      // do something after successful authentication 
     } else { 
      // Do other stuff 
     } 
    }); 
    }); 

I 얻을 크롬 JS 콘솔에서 다음과 같은 오류 :

catch되지 않은 형식 오류 : 속성을 읽을 수 없습니다 '바인딩'정의의 : strophe.register .js : 90.

내가 뭔가를 놓치고 있는지, 아니면 strophe.register.js에 추가 종속성이 있는지 확실하지 않은가요?

저는 strophe.register를 사용하고 있습니다.여기에서 js : https://github.com/strophe/strophejs-plugins/blob/master/register/strophe.register.js

답변

3

서버에 '연결'되고 '인증'되는 연결간에 차이가 있습니다. 대역 내 등록을 수행하려면 연결하고 인증 단계를 수행하지 않은 다음 스 D자를 보내 등록을 수행하면됩니다. 서버가 대역 내 등록을 지원하면 허용합니다 (연결이 인증되지 않은 동안 다른 XMPP 엔터티와의 통신을 차단해야 함).

+0

안녕하세요, 귀하의 답변에 감사드립니다. strophe.register.js를 발견했으며 지금 사용하려고합니다. 내 이해에서, 그것은 나를 쉽게 사용자를 등록 할 수 있어야하지만, 나는 그것에 몇 가지 문제가 있습니다. 나는 이것을 원래의 포스트에 추가했다. 고마워, br, chris – hansa

+0

나는 잘 모르겠다. 그러나 나는 당신이 지금 새로운 질문에 당신의 더 구체적인 문제를 물어보고 이것을 대답으로 표시하는 것을 고려해야한다고 생각한다. 지금 당장 귀하의 질문 게시는 실제 질문이 숨겨진 텍스트의 거대한 벽입니다. – Flow

+0

네, 그렇게하겠습니다. Im는 때로는 너무 많은 질문을하는 것을 주저합니다. SO가 그 점을 좋아하는지 확실하지 않습니다. 하지만이 경우에는 입력 해 주셔서 감사합니다. – hansa

관련 문제