mirror of
https://github.com/stack-auth/stack.git
synced 2026-06-04 21:04:37 +08:00
Re-add CLI auth docs
This commit is contained in:
parent
d58dda3ed8
commit
fe3bd7a201
56
docs/public/stack-auth-cli-template.py
Normal file
56
docs/public/stack-auth-cli-template.py
Normal file
@ -0,0 +1,56 @@
|
||||
import time
|
||||
import requests
|
||||
import webbrowser
|
||||
import urllib.parse
|
||||
|
||||
def prompt_cli_login(
|
||||
*,
|
||||
base_url: str = "https://api.stack-auth.com",
|
||||
app_url: str,
|
||||
project_id: str,
|
||||
publishable_client_key: str,
|
||||
):
|
||||
if not app_url:
|
||||
raise Exception("app_url is required and must be set to the URL of the app you're authenticating with")
|
||||
if not project_id:
|
||||
raise Exception("project_id is required")
|
||||
if not publishable_client_key:
|
||||
raise Exception("publishable_client_key is required")
|
||||
|
||||
def post(endpoint, json):
|
||||
return requests.request(
|
||||
'POST',
|
||||
f'{base_url}{endpoint}',
|
||||
headers={
|
||||
'Content-Type': 'application/json',
|
||||
'x-stack-project-id': project_id,
|
||||
'x-stack-access-type': 'client',
|
||||
'x-stack-publishable-client-key': publishable_client_key,
|
||||
},
|
||||
json=json,
|
||||
)
|
||||
|
||||
# Step 1: Initiate the CLI auth process
|
||||
init = post('/api/v1/auth/cli', {
|
||||
'expires_in_millis': 10 * 60 * 1000,
|
||||
})
|
||||
if init.status_code != 200:
|
||||
raise Exception(f"Failed to initiate CLI auth: {init.status_code} {init.text}")
|
||||
polling_code = init.json()['polling_code']
|
||||
login_code = init.json()['login_code']
|
||||
|
||||
# Step 2: Open the browser for the user to authenticate
|
||||
url = f'{app_url}/handler/cli-auth-confirm?login_code={urllib.parse.quote(login_code)}'
|
||||
print(f"Opening browser to authenticate. If it doesn't open automatically, please visit:\n{url}")
|
||||
webbrowser.open(url)
|
||||
|
||||
# Step 3: Retrieve the token
|
||||
while True:
|
||||
status = post('/api/v1/auth/cli/poll', {
|
||||
'polling_code': polling_code,
|
||||
})
|
||||
if status.status_code != 200 and status.status_code != 201:
|
||||
raise Exception(f"Failed to get CLI auth status: {status.status_code} {status.text}")
|
||||
if status.json()['status'] == 'success':
|
||||
return status.json()['refresh_token']
|
||||
time.sleep(2)
|
||||
2
docs/templates/others/cli-authentication.mdx
vendored
2
docs/templates/others/cli-authentication.mdx
vendored
@ -5,7 +5,7 @@ description: How to authenticate a command line application using Stack Auth
|
||||
|
||||
If you're building a command line application that runs in a terminal, you can use Stack Auth to let your users log in to their accounts.
|
||||
|
||||
To do so, we provide a Python template that you can use as a starting point. [Download it here](https://github.com/stack-auth/stack-auth/tree/main/docs/examples/stack_auth_cli_template.py) and copy it into your project, for example:
|
||||
To do so, we provide a Python template that you can use as a starting point. [Download it here](https://github.com/stack-auth/stack-auth/tree/main/docs/public/stack_auth_cli_template.py) and copy it into your project, for example:
|
||||
|
||||
```py
|
||||
└─ my-python-app
|
||||
|
||||
Loading…
Reference in New Issue
Block a user