Sign In with Device

Our Flutter SDK offers the easiest way to integrate Cotter's Sign In with Device. You can simply call a function and it does most of the heavy lifting and authentication for you.

Concepts: Learn about how Sign in with Device works.

There are major updates planned for this feature. Contact us in Slack so we can help you prepare for it.

What you're building

Import Cotter as a dependency

Add Cotter to your pubspec.yaml , then run flutter pub get.


Check the latest releases in You may need to restart your flutter for it to run pod install (stop flutter run and re run it).

For Android: Update minSdkVersion to 18 following the installation instructions.

Step 1: Import and Initialize Cotter

Import Cotter in your lib/main.dart, then initialize it inside HomePageState.

import 'package:cotter/cotter.dart'; // Import Cotter

class HomePageState extends State {

  // 1️⃣ Initialize Cotter
  Cotter cotter = new Cotter(apiKeyID: API_KEY_ID); // 👈 Specify your API KEY ID here

  // 2️⃣ TODO: Make Sign Up Function
  // 3️⃣ TODO: Make Login Function
  Widget build(BuildContext context) { ... }

You can create a free account at Cotter to get your API_KEY_ID.

Make sure you allow Trusted Devices Method in the dashboard.

Step 2: Make a Sign Up Function

To sign up, call cotter.signUpWithDevice and input the user's email. This will create a new user in Cotter and trust the current device to allow logins. This function returns the User object.

  // 2️⃣  Make Sign Up Function
  void signUp(BuildContext context) async {
    try {
      // 🚀 One-line Sign Up
      // Create a new user in Cotter and trust the current device
      var user = await cotter.signUpWithDevice(identifier: inputController.text);
    } catch (e) {

(Optional) You can also verify the user's email or phone number at this step

To verify the user's email or phone number, follow this guide after you've finished this one.

pageAdd Email/Phone Verification

Step 3: Make a Login Function

To sign in, call cotter.signInWithDevice . If the user is logging-in from a device that they trust, they'll automatically be approved. This function returns the Event object.

  // 3️⃣  Make Login Function
  void login(BuildContext context) async {
    try {
      // 🚀 One-line Login
      var event = await cotter.signInWithDevice(identifier: inputController.text, context: context);
    } catch (e) {

To get the Logged-in User Info and Access Token, follow this section:

pageGetting OAuth TokenspageGetting the Logged-in User

Logging-in From a Trusted Device

If the user logged-in from a trusted device, their login request will automatically be approved.

Logging-in From a Non-Trusted Device

If the user logged-in from a different device that is not trusted, they will be presented with a prompt asking them to approve the login from their trusted phone inside your app. We'll cover this in the next guide.

Validating Cotter's Access Token

Checkout how to verify the OAuth Tokens from Cotter here:

pageVerifying JWT Tokens

🎉 You're done!

Add Email/Phone Verification

You can also verify your user's email or phone number during the sign up process.

pageAdd Email/Phone Verification

Getting the Logged-in User

Cotter's SDK automatically saves the logged-in user in your device's secure storage. Check out how to get the user information:

pageGetting the Logged-in User

Getting OAuth Tokens

Cotter also automatically generates an access_token, id_token , and refresh_token that is securely stored in the device's secure storage. Check how to get these tokens:

pageGetting OAuth Tokens

Last updated