OAuth2 Login

"template": "login_oauth2"

This view can be used for devices that need OAuth2 authorization. When it's successful, it will automatically proceed to the next view.

Example

/app.json

{
    "id": "com.athom.testsuite",
    "drivers": [
        {
            "id": "my_driver",
            "pair": [
                {
                    "id": "login_oauth2",
                    "template": "login_oauth2"
                },
                {
                    "id": "list_devices",
                    "template": "list_devices_singular",
                    "navigation": {
                        "next": "add_devices"
                    }
                },
                {
                    "id": "add_devices",
                    "template": "add_devices"
                }
            ]
        },
        ...

/drivers/<driver_id>/driver.js

const Homey = require('homey');

class MyDriver extends Homey.Driver {

    onPair( socket ) {

        let apiUrl = 'https://api.myservice.com/oauth2/authorise?response_type=code&client_id=' + Homey.env.CLIENT_ID + '&redirect_uri=https://callback.athom.com/oauth2/callback/'

        let myOAuth2Callback = new Homey.CloudOAuth2Callback(apiUrl)
            myOAuth2Callback
                .on('url', url => {

                    // dend the URL to the front-end to open a popup
                    socket.emit('url', url);

                })
                .on('code', code => {

                    // ... swap your code here for an access token

                    // tell the front-end we're done
                    socket.emit('authorized');
                })
                .generate()
                .catch( err => {
                    socket.emit('error', err);
                })

    }

}

This pair template works best with the homey-oauth2app module.

Options

Key Type Default Description
hint i18n-object
button i18n-object "Log-in"

When either hint or button are set to a value, a button will appear and wait for the user to click it before opening the popup.