• auth0 is a commercial thing, and it's fairly heavy as well as pricey.

    The cost:

    That's basically not far from the cost of our web servers for all sites. So it's definitely expensive.

    However they have a free plan if the number of "active users" is below 7k in a month... and so I figure that I can make each site owner register their own auth0 account, and this spreads the load, whilst leaving the site owners fully in control of their user lists, and it means it's free.

    But the second issue... the minified JavaScript is over 600KB. That's more than half a meg, for JS just to sign in.

    That's crazy.

    But hey, this all works, so it's a good plan B.

    Ah... plan B.

    Because Portier is still Plan A. I've configured auth0 to do what Portier will do, auth against Google and Microsoft, or send a code to your email.

    Portier is free, and there's no need to make it have a 600KB JS file.

    So Portier is behind schedule but free, and should work identically to the way auth0 is working (or near enough to not make a difference).

    Portier is in fact the preferred option as:

    • it is free
    • it is open source
    • it can be self-hosted
    • it will be lighter and quicker

    But the Plan B means:

    • I definitely have something in the bag for when Persona shuts
    • Sites like the Rapha Cycling Club can opt to integrate their auth0 into their real user database (sign into the shop, be automatically signed into the forum)
    • Sites that want it can opt to use auth0 instead of Portier (if they have low enough usage to be free or are cool with the cost)

    Basically... options, this gives us options.

  • They only ship a single JS file, that is capable of doing both a traditional web app and a single page JS app. The latter is the first part of the issue.

    Then it is possible to configure an auth0 app to use lots of different authentication providers... as an idea from the JS:

    var STRATEGIES = exports.STRATEGIES = {
      "amazon": "Amazon",
      "aol": "Aol",
      "baidu": "百度",
      "box": "Box",
      "dwolla": "Dwolla",
      "ebay": "ebay",
      "exact": "Exact",
      "facebook": "Facebook",
      "fitbit": "Fitbit",
      "github": "GitHub",
      "google-openid": "Google OpenId",
      "google-oauth2": "Google",
      "instagram": "Instagram",
      "linkedin": "LinkedIn",
      "miicard": "miiCard",
      "paypal": "PayPal",
      "planningcenter": "Planning Center",
      "renren": "人人",
      "salesforce": "Salesforce",
      "salesforce-community": "Salesforce Community",
      "salesforce-sandbox": "Salesforce (sandbox)",
      "shopify": "Shopify",
      "soundcloud": "Soundcloud",
      "thecity": "The City",
      "thecity-sandbox": "The City (sandbox)",
      "thirtysevensignals": "37 Signals",
      "twitter": "Twitter",
      "vkontakte": "vKontakte",
      "windowslive": "Microsoft Account",
      "wordpress": "Wordpress",
      "yahoo": "Yahoo!",
      "yammer": "Yammer",
      "yandex": "Yandex",
      "weibo": "新浪微博"
    };
    

    When you combine both "all the JS for a single page web app (in something like React)" with "all the JS to talk to all these social providers" whilst then having "all the JS to render the UI"... one ends up with a huge JavaScript file.

About

Avatar for Howard @Howard started