New users - "no email" in admin panel

General Discussion
  • We add new users via the API when they sign up to our service. Since upgrading to v3, users all have "no email" until they have clicked the verification link that's sent to them.

    98b66af9-1d1c-4181-ac38-1bf789d147f8-image.png

    This makes a mess of several things:

    1. Our SSO setup, because we're not able to look up the user by email, so they can't log in at all until they've verified their email
    2. We can't use the "Validate email" option to validate them ourselves, because it says "Invalid email"
    3. Re-sending the verification link also does not work, presumably because it doesn't know where to send it

    I have a situation where a user can't find the validation email and I cannot validate him or re-send the email to him. I am going to have delete him and recreate him from scratch.

    This can't be intended behaviour surely? Is there a way to make the email address show up even if they haven't verified it yet?

  • Take a look at https://community.nodebb.org/topic/16962/all-about-emails-and-how-they-re-used-in-nodebb, specifically if you want emails to be verified right away you can do :

    const uid = await User.create({ username: 'foobar' });
    await user.setUserField(uid, 'email', '[email protected]');
    await user.email.confirmByUid(uid);
    
  • I found this to be an issue also.
    Since v3 I had bigger problems after verification emails not arriving, (I did check the email service settings.)
    In this case it was the gmail recipient not getting it, not that it wasn't sent by the server, so it may be an gmail issue.
    However since v3 you can't get past login page if email not verified, so I had to turn this off in meantime.

  • @baris said in New users - "no email" in admin panel:

    Take a look at https://community.nodebb.org/topic/16962/all-about-emails-and-how-they-re-used-in-nodebb, specifically if you want emails to be verified right away you can do :

    const uid = await User.create({ username: 'foobar' });
    await user.setUserField(uid, 'email', '[email protected]');
    await user.email.confirmByUid(uid);
    

    I understand the rationale, but:

    1. We should still be able to use the "send validation email" in ACP to re-send the validation email. Currently, it says "SUCCESS - Confirmation email sent", but it is not sent
    2. If I go to the user's profile page and try to set their email address there, it redirects me to the /register/complete endpoint and asks for an email and password. Presumably these are the details of the user I'm trying to update? I am not going to know what their password is!
    3. What's the best workflow to handle this via the write API in future? Create the user without providing the "email" and then call /api/v3/users/{uid}/emails to add the email with the "skipConfirmation" property?
  • Sounds like a bug, admins should be able to set and confirm user's email without providing the password. @julian

  • What is your email setup? Are you sure things aren't just being caught by a spam filter? Try sending a test email from the ACP

  • @PitaJ We're sending email via a Google Workspace account. It sends the initial verification email fine when the account is created, and is successfully sending notification digests etc to verified members (a copy of every email is saved to the sent items of that email account). Test emails from ACP also work fine.

    It seems the verification links expire, and if we need to re-send them then they are not sent, even though it says they are. I've tried this with a couple of different users with the same result.

  • @btc I plan on improving the manage/users section. Right now it shows (No email) for everyone even if they have entered an email during registration.

    current.png

    So there is no way to tell which of these users left the email field empty or have a pending/expired verification email.

    Gonna try to change it so it looks like below.

    new.png

    After that you should be able to manually verify them from the ACP or resend the confirmation email. Right now as you already figured out the confirmation email expires and there is no record of the email it was sent to so the resend in the ACP and manual verification doesn't work.


Suggested Topics


  • sort user list on chat

    General Discussion
    0 Votes
    1 Posts
    143 Views

    Hi,

    I want to sort the list of users on chat box by alphabetical order with JS or CSS at these 2 places:

    f9d4359b-0300-4a29-9552-2c0d64ce7b6a-image.png

    Can you help me for this ?

  • israeli users

    General Discussion
    0 Votes
    3 Posts
    247 Views

    @Per0x said in israeli users:

    duplicate
    https://community.nodebb.org/topic/14814/have-a-hebrow-forum

    That's where I asked and realized there wasn't. So I opened a new one, but you're right I was wrong so I deleted it

  • 0 Votes
    3 Posts
    1k Views

    @yariplus ok, i will have a try with it , thanks~

  • New user status

    General Discussion
    2 Votes
    4 Posts
    2k Views

    @Phate

    @codecowboy

    Yayyyyy no waiting hahahahahah

    Spoke too soon.... Now I'm on a 30 second restriction hahahahahahaahahahha

  • 0 Votes
    11 Posts
    4k Views

    @pichalite

    Thanks for offering help!
    Here is the users_list.tpl content.

    I did change users.js

    <!-- BEGIN users --> <li class="users-box registered-user" data-uid="{users.uid}"> <div class="user-data-container"> <div class="user-media"> <a href="{config.relative_path}/user/{users.userslug}"> <div class="user-picture"> <img src="{users.picture}" /> </div> </a> <div class="user-info"> <span> <i component="user/status" class="fa fa-circle status {users.status}" title="[[global:{users.status}]]"></i> </span> <br/> <!-- IF route_users:joindate --> <div title="joindate" class="joindate"> <i class='fa fa-clock'></i> <span class='timeago' title="{users.joindateISO}"></span> </div> <!-- ENDIF route_users:joindate --> <!-- IF route_users:reputation --> <div title="reputation" class="reputation"> <i class='fa fa-star'></i> <span class='formatted-number'>{users.reputation}</span> </div> <!-- ENDIF route_users:reputation --> <!-- IF route_users:postcount --> <div title="post count" class="post-count"> <i class='fa fa-pencil'></i> <span class='formatted-number'>{users.postcount}</span> </div> <!-- ENDIF route_users:postcount --> </div> </div> <div class="user-info-extended"> <a href="{config.relative_path}/user/{users.userslug}" class="uie-username"><h4>{users.username}</h4></a> <p>{users.signature}</p> <p id="uie-location">{users.location}</p> <a>{users.website}</a> </div> </div> <div class="user-interaction"> <!-- IF !config.disableChat --> <a href="#" class="btn btn-primary btn-sm chat-btn-users" data-uid='{users.uid}' data-username='{users.username}'>[[user:chat]]</a> <!-- ENDIF !config.disableChat --> </div> <hr> </li> <!-- END users -->

    I alse changed the /srv/<url>/www/public/src/client/users.js file content to handle the chat button. That should not alter the new user load but here is the content I added to the end of Users.init = function(){... function.

    /*--- eRes change: added users button listener*/ /* note: delegated event handling*/ $('#users-container').on('click', '.chat-btn-users', function() { app.openChat($(this).data('username'), $(this).data('uid')); }); /*note: hide user interaction div */ $('#users-container').on("mouseenter", '.users-box', function(){ $(this).children(".user-interaction").css('visibility','visible'); }); $('#users-container').on("mouseleave", '.users-box', function(){ $(this).children(".user-interaction").css('visibility','hidden'); }); /*--END-- eRes change: added users button listener */

    Thanks again!