stack/docs-mintlify/guides/apps/authentication/cli-authentication.mdx
Konstantin Wohlwend d68631ea4f Update GitHub URL
2026-05-19 10:27:53 -07:00

67 lines
2.1 KiB
Plaintext

---
title: CLI App Authentication
description: How to authenticate users in your own command-line application using Stack Auth
sidebarTitle: CLI App Authentication
---
If you're building your own command-line application, you can use Stack Auth to let users log in from a terminal.
<Info>
This page is about adding authentication to your own CLI app. For the official `stack` command, see the [Stack CLI guide](/guides/going-further/cli).
</Info>
To do so, we provide a Python template that you can use as a starting point. [Download it here](https://github.com/hexclave/stack-auth/tree/main/docs/public/stack-auth-cli-template.py) and copy it into your project, for example:
```
└─ my-python-app
├─ main.py
└─ stack_auth_cli_template.py # <- the file you just downloaded (rename to use underscores for Python import)
```
Then, you can import the `prompt_cli_login` function:
```py
from stack_auth_cli_template import prompt_cli_login
# prompt the user to log in
refresh_token = prompt_cli_login(
app_url="https://your-app-url.example.com",
project_id="your-project-id-here",
publishable_client_key="your-publishable-client-key-here",
)
if refresh_token is None:
print("User cancelled the login process. Exiting")
exit(1)
# you can also store the refresh token in a file, and only prompt the user to log in if the file doesn't exist
# you can now use the REST API with the refresh token
def stack_auth_request(method, endpoint, **kwargs):
# ... see the REST API overview for required Stack Auth headers
# https://docs.stack-auth.com/api/overview
def get_access_token(refresh_token):
access_token_response = stack_auth_request(
'post',
'/api/v1/auth/sessions/current/refresh',
headers={
'x-stack-refresh-token': refresh_token,
}
)
return access_token_response['access_token']
def get_user_object(access_token):
return stack_auth_request(
'get',
'/api/v1/users/me',
headers={
'x-stack-access-token': access_token,
}
)
user = get_user_object(get_access_token(refresh_token))
print("The user is logged in as", user['display_name'] or user['primary_email'])
```