Authenticate from a Non-Trusted Device
There are 2 steps in authenticating a Non-Trusted Device
- 1.Make a request from the Non-Trusted Device and wait for approval. The SDK will automatically show a prompt asking the user to approve this request from the Trusted Device.
- 2.Approve the request from a Trusted Device. The user should tap a button to check if there's a login request. They can then approve or reject the login request.
- 3.When the login request is approved, the Non-Trusted Device will receive
oauth_tokens
. You should validate these tokens in your backend.

Requesting Login from a Non-Trusted Device
Same as how it works with Authenticating from a Trusted Device, to authenticate a device, call
cotter.signInWithDevice
. This will automatically detect whether the current device is a Trusted Device or not.// 1️⃣ Request trusted device authentication
var cotter = new Cotter(API_KEY_ID);
cotter.signInWithDevice(
identifier, // User's email, phone or username
this.onRequestSuccess,
this.onRequestError,
);
When an Authentication Event is requested using method
TRUSTED_DEVICE
, there are 2 possible cases:You will be automatically approved if the request is coming from a Trusted Device. This is covered in Authenticate from a Trusted Device.
If the current device is not a Trusted Device, then it will create a pending event. This pending event will need to be approved by a Trusted Device.

Press a button to approve a login request from the Trusted Device
To check if there's a pending event for this user, you can call the
getNewEvent
method from a Trusted Device.approveLogin = async () => {
let cotter = new Cotter(API_KEY_ID);
try {
let user = await cotter.getLoggedInUser();
await user.checkNewSignInRequest();
} catch (err) {
console.log(err);
}
}
...
<Button
onPress={this.approveLogin}
title="Approve Login"
/>
In the future, your app that is installed in a Trusted Device will receive a notification and this method is invoked when the notification is opened.
For now, you should tell your user to press a button and invoke this method when they try to login from a non-trusted device.
The SDK will open a prompt in the Trusted Device asking if the user want to approve or reject the authentication request

Prompt to approve request from a Trusted Device
In the prompt in the user's Non-Trusted Device (right picture), you can Customize the Prompt to ask them to press a specific button in the Trusted Device to invoke the prompt on the left.

When approved, you'll receive the JSON response
When the user approved the login request in the Trusted Device, your
onSuccess
function in the authentication request in step 1 will be invoked and will receive a JSON response with an access token:JSON Response
{
// OAuth 2.0 Tokens
"oauth_token": {
"access_token": "eyJhbGciOiJFUzI1N...",
"auth_method": "TRUSTED_DEVICE",
"expires_in": 3600,
"id_token": "eyJhbGciOiJFUzI...",
"refresh_token": "33625:anGsIfvFd...",
"token_type": "Bearer"
},
// Information about the login request
"ID": 2535926,
"CreatedAt": "2020-08-01T01:36:24.321921222Z",
"DeletedAt": "0001-01-01T00:00:00Z",
"UpdatedAt": "2020-08-01T01:36:24.321921425Z",
"approved": true, // This login request is approved
"client_user_id": "abcdefgh-d15c-466f-aaa3-f029a8e534c3",
"event": "LOGIN",
"ip": "172.92.5.201",
"issuer": "<YOUR API KEY ID>",
"location": "San Francisco",
"method": "TRUSTED_DEVICE",
"new": false,
"signature": "L6x8sLHyPTOMCxudw34YTFGCEO4dGvakJl0g9dIDjUp2gaXbD7Yfxo86Dr7OEtHYmSYegSJkwmZjMzDnPvltDQ==",
"timestamp": "1596245784",
"user_id": "00000000-0000-0000-0000-000000000000"
}
You should pass the
access_token
to your backend when logging-in users, approving transactions, etc. Learn how to validate the access token:
Last modified 2yr ago