There is a steam plugin that looks like it’ll meet your needs. It does not get an email address from steam (as Steam won’t provide it), but it will pull over avatars.
This plugin is a little useless, you can’t add a steam account on an existing discourse account, and you can’t see the steam profile of a discourse user. And you can’t import steam auth from other forum CMS.
Don’t think so - discourse-chat-integration has stuff for sending notifications to group chat systems, but nothing that would help with associating user accounts.
But this is a big limitation right? All other forum systems have this option with facebook, twitter, google+, etc… This option is very important for my community or other game community. Some players use steam auth and a temp mail for register. Or maybe if a player steal a steam account of another user, discourse user can’t delete the token.
Yes. And from what I’ve read (and it appears that you’ve read it too), it’s non-trivial and will take changes to core. I’m not much of a plugin developer, but my guess is that your best bet will be to become a business customer and pay for a year’s hosting up front.
To do this with the authentication methods provided in core, sure - but for Steam I’m relatively confident you could just extend discourse-steam-login. Here’s how I’d go about it (if I had the time):
add a “associate with steam account” button in user preferences with a plugin outlet
link it to a plugin-controlled server side route
this route handles authenticating the user with steam, fetching the steam user id, and associating it with the user in discourse like so: ::PluginStore.set('steam', "steam_uid_#{data[:steam_uid]}", {user_id: user.id })
now a user can authenticate using whatever method they’re currently logged in with, or steam, and be logged into the same account
Plugin outlets would come to the rescue here again. Difficult to go into the specifics with no knowledge of what data from Steam you want to show in Discourse, and how the Steam API works. Might be possible entirely client side, might require a small server side piece.
As @pfaffman says, this wouldn’t be part of the plugin, but an importer script.