欢迎访问宙启技术站
智能推送

使用GoogleAppEngineAPIUsers实现邮件确认和账号激活功能

发布时间:2024-01-04 05:28:46

在使用Google App Engine的API来实现邮件确认和账号激活功能前,我们需要确保已经在Google Cloud Platform上创建了一个项目,并且已经启用了App Engine和Cloud Datastore服务。

首先,我们需要在项目的根目录下创建一个名为utils.py的文件,用于定义一些常用的函数和类。

import random
import string
from google.appengine.api import users
from google.appengine.api import mail
from google.appengine.ext import ndb

def generate_activation_key(length):
    """生成指定长度的随机激活码"""
    chars = string.ascii_lowercase + string.ascii_uppercase + string.digits
    return ''.join(random.choice(chars) for _ in range(length))

class User(ndb.Model):
    """用户模型"""
    email = ndb.StringProperty()
    activation_key = ndb.StringProperty()
    is_active = ndb.BooleanProperty(default=False)

    @classmethod
    def create(cls, email):
        """创建新用户"""
        activation_key = generate_activation_key(16)
        user = cls(email=email, activation_key=activation_key)
        user.put()
        return user

接下来,我们可以创建一个基于Flask框架的简单应用来演示邮件确认和账号激活的功能。在项目的根目录下创建一个名为main.py的文件,并添加如下代码:

import webapp2
from google.appengine.ext.webapp.util import run_wsgi_app
from flask import Flask, request, redirect, url_for, render_template
from utils import User

app = Flask(__name__)

@app.route('/')
def index():
    if users.get_current_user():
        return 'Hello, {}!'.format(users.get_current_user().nickname())
    else:
        return 'Hello, stranger!'

@app.route('/signup', methods=['GET', 'POST'])
def signup():
    if request.method == 'POST':
        email = request.form['email']
        user = User.create(email)
        send_activation_email(user.email, user.activation_key)
        return redirect(url_for('activation'))
    return render_template('signup.html')

@app.route('/activation')
def activation():
    return render_template('activation.html')

def send_activation_email(email, activation_key):
    """发送激活邮件"""
    sender = 'noreply@example.com'
    subject = 'Account Activation'
    body = 'Click the following link to activate your account: {}/activate?email={}&activation_key={}'.format(request.host_url, email, activation_key)
    mail.send_mail(sender, email, subject, body)

def activate_user(email, activation_key):
    """激活用户"""
    user = User.query(User.email == email, User.activation_key == activation_key).get()
    if user:
        user.is_active = True
        user.put()
        return True
    return False

@app.route('/activate')
def activate():
    email = request.args.get('email')
    activation_key = request.args.get('activation_key')
    if activate_user(email, activation_key):
        return 'Your account has been activated successfully!'
    return 'Failed to activate your account.'

if __name__ == '__main__':
    app.run()

在上述代码中,index函数用于展示当前登录用户的昵称,signup函数用于处理用户注册请求,并通过调用send_activation_email函数发送激活邮件,activation函数用于展示激活页面,activate_user函数从数据库中查询用户并激活用户账号,activate函数用于处理激活链接的请求。

同时,我们还需要创建两个HTML模板文件。在项目的根目录下创建一个名为templates的文件夹,并在其中创建两个文件signup.htmlactivation.html,分别用于用户注册和账号激活页面的展示。以下是示例代码:

signup.html:

<!DOCTYPE html>
<html>
<head>
    <title>Sign Up</title>
</head>
<body>
    <h1>Sign Up</h1>
    <form action="/signup" method="post">
        <label for="email">Email:</label>
        <input type="email" name="email" id="email" required><br>
        <input type="submit" value="Sign Up">
    </form>
</body>
</html>

activation.html:

<!DOCTYPE html>
<html>
<head>
    <title>Activation</title>
</head>
<body>
    <h1>Activation</h1>
    <p>Please check your email for the activation link.</p>
</body>
</html>

最后,将代码部署到Google App Engine上运行即可实现邮件确认和账号激活功能。用户注册后,系统将自动发送一封包含激活链接的邮件给用户,用户通过点击链接即可激活账号。在网页中登录的用户可以看到他们的昵称,而未登录的用户将看到问候语"Hello, stranger!"。

需要注意的是,上述示例中使用的是Google App Engine的旧版本API,如果你使用的是新版本的API,请自行进行相应的调整。