Help with migrating and onboarding users to a private Discourse

I’m migrating a private community from Ning to Discourse. I’m confused about how to onboard and manage our users.

Our Discourse is closed to the public (login required).

Our users are all from specific higher ed instiutions, so in theory we could limit logins by domain. But I want to avoid using the email domains whitelist option. We’ll almost certainly need to add users who have generic Gmail or other accounts at some point.

Since email domains whitelist is out, we have to either use invites or approvals. AFAICT, these methods are incompatible. That is, if you allow regular users to send invitations, these will not be approved, which won’t work for our case.

So either we enable the invite only option and restrict invitations to admins, or disable invitations altogether and use the must approve users option instead.

I’m inclined to use invitations right now as that will allow us to invite users en masse. But, eventually we’ll be implementing SSO with our main site, which will prevent us from using invitations long-term.

Would I run into trouble if I used invites to onboard users to Discourse and then switch to approving them? Imported users are pre-approved. And, despite the warning about revoking access in the settings, I didn’t find this to be the case in my test site. Have I misunderstood how this works?

A related issue is that I want to import certain users – because they have posted some content – but who are no longer part of the community. So I don’t want them to be able to login to the site. How can I have inactive users? I don’t see how to do this at all. I thought about enabling approvals and “un-approving” these users, but I don’t see an option to do so.

Any help figuring any of this out would be much appreciated.


No, that should work fine.

You should anonymize them. At the bottom of their admin page (/admin/users/1234/username), you’ll see the button to do this.

It will remove all personal information from the profile (username, email, bio, avatar, etc.) and the account owner won’t be able to login with that account anymore.


Thanks for the confirmation. But I still don’t understand why access is not revoked when I turn on approvals:

That label is pretty clear, but it doesn’t describe what’s happening on my test site, at least. Turning on this option does not revoke access to any user.

This is a bit stronger than I’d like. I would like to preserve their name, email & avatar. I can re-add the username, but I’d like to preserve the rest of the information, if possible. Also, is there anyway of making a previously anonymized account accessible again?

In addition to the questions in my previous post, I have a couple more.

I can’t invite imported users, because they already exist in the system. No problem. I can send out a communication via MailChimp to ask them to reset the passwords on their accounts by heading to

Follow-up question: the above process doesn’t trigger the onboarding email which describes how to best use Discourse. I’d love for our users to receive this. Is there something I can reset so that users receive the onboarding email when they reset their password for the first time?

Relatedly, I’ve tried impersonating various users and their topics appear as having unread replies that are being tracked. How can I disable this behavior?

(Sorry for double-posting. I’m packing it up for tonight. I’m hoping case someone can offer insight by the time I start tinkering again tomorrow.)

A few other things you might want to set, since this is a private, invite-only community:

  1. Trust Levels - default invitee trust level = 1. They’re sort of already trusted if it’s invite only.
  2. Rate Limits - max invites per day = 0. You don’t want community members inviting unapproved people.

If you’re migrating from another platform, there’s a LOT of things you simply can’t do and are likely to have to live with when you migrate. I wouldn’t worry about things like threads being unread or receiving the onboarding emails. When you send out the email telling them how to reset their password, include that information. Also, create a post and pin it to the top for say 30 days.

I went through this 2 months ago. A lot of the little things you’re talking about are probably not worth the effort… and some of it is a LOT of effort.


I’ll try not to worry (much) about things that I can’t fix. But if I can fix things that improve the onboarding UX, I’d like to do so. The general gist of your post, though, was helpful. It’s good to learn from battle-scarred veterans :smiley:

I won’t be using invites at all, finally. I’ll be importing old users using a script. New users will be able to sign up by themselves, but will require approval by admins.

Even though it doesn’t affect me. I’m still curious about why enabling approvals doesn’t un-approve all existing users.

Good tip on the max invites per day and, even more so, on the pinned post idea.

I found the content of the onboarding email in config/locales/server.en.yml and created a topic out of it. I plan to use a combination of email and banner/pinned topics to guide our users. That will work fine.

Still pending:

Hmm… I guess some behaviour has changed and the setting description is out of sync.

Ok then try one of these 3 options that might suit you:

Maybe you can pin those instructions and direct imported users to it in the same email you send to them with the /password-reset link.


It didn’t even occur to me that the description might be out of date! I have such faith :slight_smile:

I’ve decided do go ahead with a combination of deleting users that haven’t created posts and suspending those that do for 9999 days. It’s not ideal, but it will work for now and give you until 2043 to provide a more elegant solution :wink:

Any thought on the following:

I don’t follow. Do you have screenshots that would explain it?

Sure. I don’t have any new content on the Discourse site, everything is imported.

Here’s a screenshot from my account:

As you can see I have 5 unread posts in 1 topic remaining. (I had more unread topics earlier today.) That topic has actually 10 replies in it, but reply number 5 is mine.

I think that Discourse watches all the topics I began and assumes I haven’t read anything after my last reply. Does this sound right?

I found it confusing and I’d rather not have to explain it to users.

Is it possible to just make sure their “unread” count is 0 starting from today?

You have unread counts after an import?? I haven’t noticed that before…

I thought it was already that way, maybe I’m wrong. It should be.

1 Like

Lol. That’s the reaction I expected. I’ve already imported the users and have began re-categorizing the content. Is there a CLI way to reset the unread counts?