README.md 8.6 KB

account-base package

Files documented

  • accounts_common.js
  • accounts_rate_limit.js
  • globals_client.js
  • globals_server.js
  • package.js
  • url_client.js
  • url_server.js

Constants

  • DEFAULT_LOGIN_EXPIRATION_DAYS = 90. Default login token lifetime. Used by AccountsCommon_getTokenLifetimeMs().
  • MIN_TOKEN_LIFETIME_CAP_SECS = 3600. Maximum value of "soon". Used by AccountsCommon._tokenExpiresSoon(when).
  • EXPIRE_TOKENS_INTERVAL_MS = 100000. Frequency of token expiration checks. Used by setExpireTokensInterval(accounts) in accounts_server.js.
  • CONNECTION_CLOSE_DELAY_MS = 10000. Logout delay for other clients. Used by Meteor.logoutOtherClients(), added from accounts_server.js.

Classes

AccountsClient

  • url_client.js additions:
    • _attemptToMatchHash() : Try to match the saved value of window.location.hash to one of the reserved hashes, to trigger an Accounts operation. On success, invokes passed handler which, when called from _initUrlMatching(), will always be defaultSuccessHandler().
    • _initUrlMatching(): called by constructor. Inits extra data on instance and invokes _attemptToMatchHash()
    • onResetPasswordLink() Register a function to call when a reset password link is clicked in an email sent by on of the hash handlers. See Accounts-onResetPasswordLink
    • onEmailVerificationLink() Register a function to call when an email verification link is clicked in an email sent by a hash handler. See Accounts-onEmailVerificationLink
    • onEnrollmentLink() Register a function to call when an account enrollment link is clicked in an email sent by a hash handler. See Accounts-onEnrollmentLink
    • Globals read
      • window.location.hash. Reserved hashes:
        • reset-password
        • verify-email
        • enroll-account
      • defaultSuccessHandler()
      • attemptToMatchHash()

AccountsCommon (accounts_common.js)

Base class for AccountsClient / AccountsServer.

  • constructor(options).
    • initializes connection, then users.
    • Options can contain:
    • connection, ddpUrl see initConnection()
    • sendVerificationEmail, forbidClientAccountCreation, restrictCreationByEmailDomain, loginExpirationInDays, and oauthSecretKey (side-effect, not saved). see config(options)
  • addDefaultRateLimit() : enable per-connection, per-method rate limiter for login, createUser, resetPassword forgotPassword to 5 calls every 10 seconds. Added from accounts_rate_limits.js.
  • config(options). Set up config for the accounts system. Call this on both the client the server.
    • Checks and filters options, before saving them to _options.
    • Setting an unknown option throws
    • Setting an already set option throws
    • Options can contain:
      • sendVerificationEmail {Boolean}: Send email address verification emails to new users created from client signups.
      • forbidClientAccountCreation {Boolean} Do not allow clients to create accounts directly. Security issue #828 exists if this is not called on both client and server
      • restrictCreationByEmailDomain {Function or String} Require created users to have an email matching the function or having the string as domain.
      • loginExpirationInDays {Number} Number of days since login until a user is logged out (login token expires).
      • oauthSecretKey When using the oauth-encryption package, the 16 byte key using to encrypt sensitive account credentials in the database, encoded in base64.
        • Warns if the oauth-encryption package is not present
        • Throws if used on client
        • Removed from saved config after passing if to the oauth-encryption package
  • ConfigError: legacy, initialized from service-configuration package during Meteor.startup().
  • connection: the MongoDB connection. If set to null, the users collection will be local (avoid !)
  • LoginCancelledError: specific error class to use when a login sequence is cancelled
  • loginServiceConfiguration: legacy, initialized from service-configuration package during Meteor.startup().
  • removeDefaultRateLimit() : disable the rate limiter for the methods below (from accounts_rate_limits.js).
  • user(): returns the currently logged-in user by finding it from Mongo based on the userId() value. Defaults to null.
  • userId(): Error("userId method not implemented") Basically an abstract method to be refined in child classes
  • users: the users collection
  • onLogin(func): Register a callback to be called after a login attempt succeeds.
  • onLoginFailure(func): Register a callback to be called after a login attempt fails.
  • _getTokenLifetimeMs(): get the remaining login token lifetime in msec. Taken from loginExpirationInDays if it exists. Defaults to DEFAULT_LOGIN_EXPIRATION_DAYS (= 90) days in msec.
  • _initConnection(options) - Options can contain
    • connection: the connection on which to load the users collection
    • ddpUrl: if connection is not set, connect to this URL
    • some non-portable, going-away, mechanism for OAuth
    • if none if available, Meteor.connection will be used as a default
  • _onLoginHook(). As per hook.js, Hook system is under development. Use onLogin(func) to make use of it.
  • _onLoginFailureHook(). As per hook.js, Hook system is under development. Use onLoginFailure(func) to make use of it.
  • _options = {} - used directly by packages like accounts-password and `accounts-ui-unstyled.
  • _tokenExpiration(when): when is a token (timestamp, used to be any number in earlier versions). It is converted to Date, and added with _getTokenLifetimeMs() to return the expiration date for the when.
  • _tokenExpiresSoon(when): when is a token (timestamp). True if it expires in less the smaller of 0.1 * _getTokenLifetimeMs()and 1 hour.
  • side-effect in accounts_rate_limits.js : loading this file initializes the rate-limiter for addDefaultRateLimit() and removeDefaultRateLimit(). This is why the package has a dependency on ddp-rate-limiter.

AccountsServer

  • methods. These 3 methods are public but marked (in 1.2.1) as likely not to remain so
    • resetPassword() : generates a password reset link (from token)
    • verifyEmail(): generates an email verification link (from token)
    • enrollAccount(): generates an account enrollment link (from token)

AccountsTest

  • methods
    • attemptToMatchHash() facade for attemptToMatchHash() function
    • Globals read
      • Accounts (see globals_server.js)

Meteor

  • userId: a copy of the Accounts.usedId() method
  • user(): a copy of the Accounts.user() method

Functions

url_client.js

  • defaultSuccessHandler() : suspends autologin, invokes other handles for the same hash, passing them a closure capable of enabling autologin.

Dependencies / Exports (package.js et al.)

Exports

Symbol Client Server Test
Accounts O O O
AccountsClient O
AccountsServer O
AccountsTest O

Dependencies

Package Client Server Specifics
underscore O O
ecmascript O O
ddp-rate-limiter O O
localstorage O
tracker O
check O
random O O
ejson O
callback-hook O O
service-configuration O O unordered (needs Accounts.connection)
ddp O O
mongo O O expected abstraction in the future
blaze O weak: define {{currentUser}}
autopublish O weak: publish extra users fields
oauth-encryption O weak
NPM crypto O in accounts_server.js

Objects (globals_(client|server).js)

  • Accounts
    • on client: new AccountsClient() (extends AccountsCommon)
    • on server: new AccountsServer(Meteor.server) (extends AccountsCommon)
  • Meteor
    • new field users for the users collection. Name is expected to become configurable in future versions.