使用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.html和activation.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,请自行进行相应的调整。
