App Suite UI (latest)
All versions
Imprint
All versions
Imprint
  • Feature Catalog
    • General
      • Getting around
      • Search and notifications
      • Settings and appearance
      • Signing in
      • Account and security
      • Onboarding and devices
      • Working with content
      • Sharing and delegation
      • Storage, plans and feedback
      • Progressive Web App
      • Feedback
      • Upsell
      • Triggers
    • Mail
      • Reading and organizing
      • Attachments
      • Writing and sending
      • Security and trust
      • Accounts and automation
      • Signatures and templates
      • Working with the other apps
      • BIMI
    • Calendar
      • Seeing your day
      • Appointments
      • People and invitations
      • Calendars and subscriptions
      • Rooms and resources
      • Video meetings
      • Search, print and transfer
    • Address Book
      • Contacts
      • Address books
      • Finding people
      • Lists and the other apps
    • Tasks
      • Tasks
      • Task lists and delegation
      • Working with the other apps
    • Drive
      • Working with files
      • Finding and arranging
      • Sharing
      • Storages and capacity
      • Working with the other apps
      • OpenCloud Drive Integration
    • Portal
    • Enterprise and Provider Edition
    • Compliance

      • Accessibility
      • Accessibility Conformance Report
      • Data protection
  • Upgrade Guide
    • Everything new since 7.10.6
    • From 7.10.6 to 8.35
    • From 8.35 to 8.47
    • From 8.47 to 8.55
    • Breaking changes and requirements
  • Deployment Guide

    • Configuration
    • Settings list
    • Login page
    • What's New dialog
    • Mail assets
    • Mail rendering and security
    • All messages folder
    • Unseen messages folder
    • Theming
    • Authentication
    • Browser support
  • Customize & Extend
    • Manifests
    • Toolbars and menus
    • Portal widget
    • Sign In
    • Internationalization
  • Architecture
    • Core UI service

URL Hash parmeters

In case the default login page is used the ui supports a limited set of parameters

https://www.example.com/#<url-hash-param>=<value> OR
https://www.example.com/appsuite/#<url-hash-param>=<value>

Prefill

URL Hash ParameterPossible ValuesDescription
login_nameany stringPrefills the username/email field

Other

URL Hash ParameterPossible ValuesDescription
autologoutany value is considered as trueShows "You have been automatically signed out" message

Customizing the login process

This articles covers how to write a plugin integrating a custom way to gain a session.

Registering the extension

As all plugins, login plugins need to be defined in a namespace. This modules for this namespace are loaded very early in the boot process.

manifest.json:

    {
        "namespace": "login"
    }

register.js:

    define('io.ox.examples/register', ['io.ox/core/extensions'], function (ext) {
        'use strict';
        # 'io.ox/core/boot' is the extension point
        ext.point('io.ox/core/boot/login').extend({
            id: 'myCustomLogin',
            after: 'autologin',  // After autologin is a good place to hook into
            login (baton) { // Extensions must implement the login method
                console.log(baton);
            }
        });

        return {};
    });

Registering an extension after: 'autologin' is a good choice, also the point from which a failing login will be recovered. The extension can return a deferred or promise if it needs the other stages to wait until its work has finished. You can skip all other phases of the login (like drawing the login form) by calling baton.stopPropagation();

ox.serverConfig

Typically login plugins turn themselves on or off based on configuration in ox.serverConfig. The ox.serverConfig is loaded and available in the definition function of the module, so can be used to decide whether an extension needs to be registered.

Signaling success / failure

You can signal success of your login method by ox.trigger('login:success', data); with data containing an equivalent of the usual login response. This includes:

session - the sessionID
locale - the users language
rampup - rampup data
context_id - the user's context id.
user_id - the user's id
user - the login name of the user

Usually, though, the custom login process will either perform a token login or generate a session via a session registration, which are passed in as arguments in the #anchor of the page. More importantly triggering a failure (like a failing autologin) resumes the execution of the other login methods. This way you could also introduce other soft-failing alternatives to autologin for reviving a session.

Disabling other login stages

Since all login stages are extensions, they can be disabled as usual on the extension point. To disable autologin call:

    ext.point('io.ox/core/boot/login').disable('autologin');

or for ignoring both the session and userToken/serverToken parameters, call

    ext.point('io.ox/core/boot/login').disable('token');

Preserving the hash data

All data passed into the ui via the url in the #anchor part is available in baton.hash. If possible try to preserve this data during the login process to allow for deep-linking into the UI.

Last Updated: 10/7/26, 2:41 PM
Prev
Portal widget
Next
Internationalization