title: Can't get One to One chat to work with ejabberd and XMPP client Psi+
body: <pre><code>Mac OSX 10.13.6
  ejabberd 19.05
  </code></pre>
  
  <p>I used an installer to install ejabberd, and when prompted I entered the following information:</p>
  
  <pre><code>ejabberd server domain: localhost
  administrator username: 7stud
  administrator password: blahblah
  </code></pre>
  
  <p>I'm following the tutorial: <a href="https://i.stack.imgur.com/ySb8X.png" rel="nofollow noreferrer">How to Build One to One Chat App Using Ejabberd &amp; Erlang from Scratch?</a>. </p>
  
  <p>If I start ejabberd by clicking on the <code>start</code> executable in the <code>ejabberd-19.05/bin</code> directory, ejabberd starts up, and a web page opens up in my browser.  I can then login to the admin web interface.</p>
  
  <p>But, the tutorial directs me to add the following to ejabberd.yml:</p>
  
  <pre><code>auth_method: sql
  sql_type: mysql
  sql_server: "localhost" 
  sql_database: "chat" 
  sql_username: "root" 
  sql_password: "" 
  </code></pre>
  
  <p>(For my mysql setup the root user has no password--I just hit return when prompted for the password)</p>
  
  <p>After doing that, if I stop ejabberd, then start ejabberd again, I can no longer login to the admin page.</p>
  
  <p>I have two questions:</p>
  
  <ol>
  <li><p>Why does adding the db configuration to ejabberd.yml prevent me from logging into the admin web interface?</p></li>
  <li><p>Why is the mysql db configuration even necessary?  According to the <a href="https://i.stack.imgur.com/iLlw6.png" rel="nofollow noreferrer">ejabberd docs</a>: <code>ejabberd default backend is Mnesia internal database</code>.  I'm perfectly happy to use mnesia (and not have to touch ejabberd.yml).</p></li>
  </ol>
  
  <p>I completed the rest of the tutorial both with the mysql db config stuff in ejabberd.yml and without, but neither User1 nor User2 received a message sent by the other user, so for some reason my ejabberd setup is not working.  I also tried configuring another mysql db by following the <a href="https://i.stack.imgur.com/iLlw6.png" rel="nofollow noreferrer">ejabberd database docs</a>:</p>
  
  <pre><code>auth_method: sql
  sql_type: mysql
  sql_server: "localhost"
  sql_database: "ejabberd"
  sql_username: "ejabberd"
  sql_password: "12345"
  </code></pre>
  
  <p>Still no luck.</p>
  
  <p>I'm willing to try any other simple tutorial that uses ejabberd to relay messages if someone can recommend one.</p>
  
  <p><strong>admin web interface</strong>:</p>
  
  <p><a href="https://i.stack.imgur.com/plWLY.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/plWLY.png" alt="enter image description here"></a></p>
  
  <hr>
  
  <p><a href="https://i.stack.imgur.com/FYfKd.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/FYfKd.png" alt="enter image description here"></a></p>
  
  <hr>
  
  <p><a href="https://i.stack.imgur.com/A9XYC.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/A9XYC.png" alt="enter image description here"></a></p>
  
  <hr>
  
  <p><a href="https://i.stack.imgur.com/Z4EXr.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Z4EXr.png" alt="enter image description here"></a></p>
  
  <hr>
  
  <p><a href="https://i.stack.imgur.com/Bmccm.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Bmccm.png" alt="enter image description here"></a></p>
  
  <p>psi+ images:</p>
  
  <h2><a href="https://i.stack.imgur.com/iLlw6.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/iLlw6.png" alt="enter image description here"></a></h2>
  
  <h2><a href="https://i.stack.imgur.com/wLgvR.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/wLgvR.png" alt="enter image description here"></a></h2>
  
  <p><a href="https://i.stack.imgur.com/a8yLV.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/a8yLV.png" alt="enter image description here"></a>
  ejabberd.yml:</p>
  
  <pre><code>###
  ###'           ejabberd configuration file
  ###
  ### The parameters used in this configuration file are explained at
  ###
  ###       https://docs.ejabberd.im/admin/configuration
  ###
  ### The configuration file is written in YAML.
  ### *******************************************************
  ### *******           !!! WARNING !!!               *******
  ### *******     YAML IS INDENTATION SENSITIVE       *******
  ### ******* MAKE SURE YOU INDENT SECTIONS CORRECTLY *******
  ### *******************************************************
  ### Refer to http://en.wikipedia.org/wiki/YAML for the brief description.
  ### However, ejabberd treats different literals as different types:
  ###
  ### - unquoted or single-quoted strings. They are called "atoms".
  ###   Example: dog, 'Jupiter', '3.14159', YELLOW
  ###
  ### - numeric literals. Example: 3, -45.0, .0
  ###
  ### - quoted or folded strings.
  ###   Examples of quoted string: "Lizzard", "orange".
  ###   Example of folded string:
  ###   &gt; Art thou not Romeo,
  ###     and a Montague?
  ###
  
  
  language: "en"
  hosts:
    - "localhost"
  
  loglevel: 4
  log_rotate_size: 10485760
  log_rotate_date: ""
  log_rotate_count: 1
  log_rate_limit: 100
  
  certfiles:
    - "/Applications/ejabberd-19.05/conf/server.pem"
  ##  - "/etc/letsencrypt/live/localhost/fullchain.pem"
  ##  - "/etc/letsencrypt/live/localhost/privkey.pem"
  
  ca_file: "/Applications/ejabberd-19.05/conf/cacert.pem"
  
  listen:
    -
      port: 5222
      ip: "::"
      module: ejabberd_c2s
      max_stanza_size: 262144
      shaper: c2s_shaper
      access: c2s
      starttls_required: true
    -
      port: 5269
      ip: "::"
      module: ejabberd_s2s_in
      max_stanza_size: 524288
    -
      port: 5443
      ip: "::"
      module: ejabberd_http
      tls: true
      request_handlers:
        "/admin": ejabberd_web_admin
        "/api": mod_http_api
        "/bosh": mod_bosh
        "/captcha": ejabberd_captcha
        "/upload": mod_http_upload
        "/ws": ejabberd_http_ws
        "/oauth": ejabberd_oauth
    -
      port: 5280
      ip: "::"
      module: ejabberd_http
      request_handlers:
        "/admin": ejabberd_web_admin
    -
      port: 1883
      ip: "::"
      module: mod_mqtt
      backlog: 1000
  
  s2s_use_starttls: optional
  
  acl:
    local:
      user_regexp: ""
    loopback:
      ip:
        - "127.0.0.0/8"
        - "::1/128"
        - "::FFFF:127.0.0.1/128"
    admin:
      user:
        - "7stud@localhost"
  
  access_rules:
    local:
      - allow: local
    c2s:
      - deny: blocked
      - allow
    announce:
      - allow: admin
    configure:
      - allow: admin
    muc_create:
      - allow: local
    pubsub_createnode:
      - allow: local
    trusted_network:
      - allow: loopback
  
  api_permissions:
    "console commands":
      from:
        - ejabberd_ctl
      who: all
      what: "*"
    "admin access":
      who:
        - access:
            - allow:
              - acl: loopback
              - acl: admin
        - oauth:
          - scope: "ejabberd:admin"
          - access:
            - allow:
              - acl: loopback
              - acl: admin
      what:
        - "*"
        - "!stop"
        - "!start"
    "public commands":
      who:
        - ip: "127.0.0.1/8"
      what:
        - "status"
        - "connected_users_number"
  
  shaper:
    normal: 1000
    fast: 50000
  
  shaper_rules:
    max_user_sessions: 10
    max_user_offline_messages:
      - 5000: admin
      - 100
    c2s_shaper:
      - none: admin
      - normal
    s2s_shaper: fast
  
  max_fsm_queue: 10000
  
  acme:
     contact: "mailto:7stud@localhost"
     ca_url: "https://acme-v01.api.letsencrypt.org"
  
  modules:
    mod_adhoc: {}
    mod_admin_extra: {}
    mod_announce:
      access: announce
    mod_avatar: {}
    mod_blocking: {}
    mod_bosh: {}
    mod_caps: {}
    mod_carboncopy: {}
    mod_client_state: {}
    mod_configure: {}
    mod_disco: {}
    mod_fail2ban: {}
    mod_http_api: {}
    mod_http_upload:
      put_url: "https://@HOST@:5443/upload"
    mod_last: {}
    ## mod_mam:
      ## Mnesia is limited to 2GB, better to use an SQL backend
      ## For small servers SQLite is a good fit and is very easy
      ## to configure. Uncomment this when you have SQL configured:
      ## db_type: sql
      ## assume_mam_usage: true
      ## default: always
    mod_mqtt: {}
    mod_muc:
      access:
        - allow
      access_admin:
        - allow: admin
      access_create: muc_create
      access_persistent: muc_create
      default_room_options:
        allow_subscription: true  # enable MucSub
        ## mam: true
    mod_muc_admin: {}
    mod_offline:
      access_max_user_messages: max_user_offline_messages
    mod_ping: {}
    mod_privacy: {}
    mod_private: {}
    mod_proxy65:
      access: local
      max_connections: 5
    mod_pubsub:
      access_createnode: pubsub_createnode
      plugins:
        - "flat"
        - "pep"
      force_node_config:
        ## Avoid buggy clients to make their bookmarks public
        "storage:bookmarks":
          access_model: whitelist
    mod_push: {}
    mod_push_keepalive: {}
    mod_register:
      ## Only accept registration requests from the "trusted"
      ## network (see access_rules section above).
      ## Think twice before enabling registration from any
      ## address. See the Jabber SPAM Manifesto for details:
      ## https://github.com/ge0rg/jabber-spam-fighting-manifesto
      ip_access: trusted_network
    mod_roster:
      versioning: true
    mod_s2s_dialback: {}
    mod_shared_roster: {}
    mod_stream_mgmt:
      resend_on_timeout: if_offline
    mod_vcard: {}
    mod_vcard_xupdate: {}
    mod_version:
      show_os: false
  
  ### Local Variables:
  ### mode: yaml
  ### End:
  
    [1]: https://www.apptha.com/blog/steps-to-build-a-private-one-to-one-chat-app/
    [2]: https://docs.ejabberd.im/admin/databases/mysql/
  </code></pre>