使用者註冊完後忘記密碼,需要進行重設的功能開發。
verify-email
import os
import json
import boto3
from datetime import datetime
dynamodb = boto3.resource("dynamodb")
table = dynamodb.Table("vlog-nipapa-tw-user")
def lambda_handler(event, context):
# --- CORS ---
method = event.get("httpMethod") or event.get("requestContext", {}).get("http", {}).get("method")
if method == "OPTIONS":
return _cors(200, "")
try:
# 支援 queryString 或 body 取值
params = event.get("queryStringParameters") or {}
body = event.get("body")
if body and isinstance(body, str):
try:
body = json.loads(body)
except:
body = {}
if not params and body:
params = body
username = params.get("user")
token = params.get("token")
if not username or not token:
return _cors(400, {"error": "Missing user or token"})
# 查詢 DynamoDB
resp = table.get_item(Key={"username": username})
item = resp.get("Item")
if not item:
return _cors(400, {"error": "User not found"})
if item.get("verified"):
return _cors(200, {"message": "User already verified"})
if item.get("verify_token") != token:
return _cors(400, {"error": "Invalid token"})
# 驗證是否過期
expire_str = item.get("verify_expire")
if expire_str:
expire_time = datetime.fromisoformat(expire_str)
if datetime.utcnow() > expire_time:
return _cors(400, {"error": "Token expired"})
# 更新 verified 狀態
table.update_item(
Key={"username": username},
UpdateExpression="SET verified = :v REMOVE verify_token, verify_expire",
ExpressionAttributeValues={":v": True}
)
return _cors(200, {"message": "✅ Email verified successfully"})
except Exception as e:
print("❌ ERROR:", str(e))
return _cors(500, {"error": str(e)})
def _cors(code, body):
return {
"statusCode": code,
"headers": {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "OPTIONS,GET,POST",
"Access-Control-Allow-Headers": "Content-Type,Authorization"
},
"body": json.dumps(body)
}
dynamodb
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": "arn:aws:logs:ap-northeast-1:<AWS_ID>:*"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:logs:ap-northeast-1:<AWS_ID>:log-group:/aws/lambda/register-vlog-member:*"
]
},
{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:Query",
"dynamodb:Scan"
],
"Resource": [
"arn:aws:dynamodb:ap-northeast-1:<AWS_ID>:table/vlog-nipapa-tw-user"
]
}
]
}