---
# System prepended metadata

title: Long term token
tags: [' feature', cli]

---

---
tags: cli, feature
author: Oliver.W
---

# Long term token

> ticket: https://app.asana.com/0/1200011502754281/1200046588610090/f

> PR: https://github.com/serverless/components/pull/928

## Story

As a serverless developer  
I like to save my credential locally and use it when needed  
So that i don't need to local every time.  

## Logic Path

### Use Credential

```sh
# Use default profile name credential info
serverless ***

# Relogin and generate temporary token
serverless *** --login

# Use env variable to set the profile name to use
TENCENT_CREDENTIALS_PROFILE=profileName2 sls ***

# Use the profile arg to set the profile name to use
serverless *** --profile profileName2


# Show message to suggest use global credentials before scan QR code.
请扫码进行登陆，或通过 sls creditionals 配置全局用户授权，详情请查看 sls --help

# Show message when use global credential 
使用授权信息 {profilename} 授权中，如果需要使用临时密钥，请使用 --login 重新登陆
```

1. Has Local Token （`TENCENT_SECRET_ID` & `TENCENT_SECRET_KEY` in env）
    * token not expired，Use local token.
    * token expired, ask login and generate a new temporary token.
2. Has Global Token
    * use specific profile token (use `default` if not provide the name)
3. No Local or Global Token
    * ask login and generate a new temporary token.


> 1. Priority for `.env`: Project env file is highest, and then is global env file config
> 2. After set the global env config, any component project without the local env file will use `TENCENT_SECRET_ID` and `TENCENT_SECRET_KEY` in the global config.
> 3. Fields in global config will not override the fields in local config

## Command Design

```sh
serverless remove/deploy 从云端移除一个 Serverless 实例
  --...                     获取移除过程的详细信息
  --login.                     扫码登陆并更新临时密钥
  --profile {name}             使用全局授权名称信息的密钥信息
serverless credentials   管理全局用户授权信息
    set                     存储用户授权信息
        --secretId / -i          (必填)腾讯云CAM账号secretId
        --secretKey / -k         (必填)腾讯云CAM账号secretKey
        --profile / -p {name}    授权名称. 默认为 "default"
        --overwrite / -o         覆写已有授权名称的密钥
    remove                  移除用户授权信息
        --profile / -n {name}    (必填)授权名称
    list                    查看用户授权信息
```

## Credential File Structure:

> ~/.serverless/tencent/credentials

```
[defautl]
id=2222
key=111

[profileName]
id=id
key=key
```

## Usage:

### set credentials

```sh
# Set with default profile name.
$ serverless credentials set --secretId xxx --secretKey xxx

# set with specific profile name.
$ serverless credentials set --secretId xxx --secretKey xxx --profile profileName1

# Set overwrite with specific profile name.
$ serverless credentials set --secretId xxx --secretKey xxx --profile profileName1 --overwrite
```

```sh
--- 存储成功提示
使用授权信息请在 serverless 命令后添加 --profile {name} 默认使用default
或储存 TENCENT_CREDENTIALS_PROFILE={name} 在项目 .env 文件中
如果在项目中需要使用临时密钥 请在命令后添加 --login 进行扫码登陆
授权信息会储存在系统本地目录，并长期有效。请确认当前电脑不是公用电脑或与他人共享 
如果密钥信息泄漏请前往 腾讯云-用户控制台 删除相关用户
更多帮助请查看 sls --help

Serverless: (绿色)授权信息 {profilename} 储存成功(/绿色)

--- 更新成功提示
Serverless: (绿色)授权信息 {profilename} 更新成功(/绿色)

--- 存储名称已存在
Serverless: (黄色)授权信息 {profilename} 已存在，请使用 --overwrite 进行覆写(/黄色)
```


### remove credentials

```
# Remove a credential with specific profile anme
$ serverless credentials remove --profile profileName1
```

```sh
--- 移除成功提示
如果需要删除相关授权用户请前往 腾讯云-用户控制台 删除相关用户
更多帮助请查看 sls --help

Serverless: (绿色)授权信息 {profilename} 移除成功(/绿色)

--- 未制定授权名称
Serverless: (黄色)未指定授权名称，请通过 --profile 指定要删除的授权名称(/黄色)

--- 移除授权名称不存在

Serverless: (黄色)授权信息 {profilename} 不存在，请通过 serverless credentials list 查看当前授权信息(/黄色)
```

### list credentials

```
# Remove all credentials
$ serverless credentials list
```

```
Serverless: 当前已有用户授权信息名称：

   - default
   - profileName1
```

### Use credentials

```
# use default credentials
$ sls deploy / sls info

# use specific credentials
$ sls deploy --profile newP / sls info --profile newP 
```

```
# 当profile不存在
Serverless: (黄色)授权信息 {profilename} 不存在，请通过 serverless credentials list 查看当前授权信息(/黄色)

# 当profile信息认证失败 (让用户知道是认证的错误，而不是我们CLI本地没有找到SecretId，误以为是CLI错误。)
Serverless › 授权认证失败：The SecretId is not found, please ensure that your SecretId is correct.

# 其他情况
Serverless › {Error Message}
```

