【Go Web开发】用户激活

2022-03-15  本文已影响0人  Go语言由浅入深

经过前面几节内容,用户可以使用我们的Greenlight API注册一个帐户,但我们不确定他们在注册过程中提供的邮件地址是否真的属于他们。因此,在本书的这一部分,将实现的功能是可以确认用户使用的邮箱地址是真是有效的,实现的方式就是在用户注册时,在发送欢迎邮件中添加“账号激活”信息。

激活账号的理由有很多,但主要的目的还是为了防止滥用非法邮箱注册。先大概说下帐户激活过程:

1、作为新用户注册的一部分,我们将创建一个加密的随机激活token,该token用户是无法猜测的。

2、我们将该token的哈希值存在一张新的token表中,表包含用户ID和token过期时间。

3、我们将在用户注册时,在发送欢迎邮件中添加激活token并发给用户。

4、然后用户提交token到PUT /v1/users/activated接口。

5、如果token的哈希值在token表中存在并且没有过期,我们将更新用户的激活状态为true。

6、最后删除token表中的激活token,以免被多次使用。

后面的内容你将学习到:

创建tokens表

首先在数据库中创建tokens表来存储用户的激活token。如果你跟随本书操作,执行以下命令创建一对数据库迁移文件:

$ migrate create -seq -ext=.sql -dir=./migrations create_tokens_table
/Users/wangmingjun/Projects/greenlight/migrations/000005_create_tokens_table.up.sql
/Users/wangmingjun/Projects/greenlight/migrations/000005_create_tokens_table.down.sql

然后分别在“up”和“down”迁移文件中添加以下内容:

File: migrations/000005_create_tokens_table.up.sql


CREATE TABLE IF NOT EXISTS tokens(
    hash bytea PRIMARY KEY,
    user_id bigint NOT NULL REFERENCES users ON DELETE CASCADE,
    expiry timestamp(0) with time zone NOT NULL,
    scope text NOT NLL  
)

File: migrations/000005_create_tokens_table.down.sql


DROP TABLE IF EXISTS tokens;

我们快速浏览下tokens表中各个列,并解释下其意思:

经过上面的文字说明,你可以用下面的命令执行“up”迁移:

$  migrate -path=./migrations -database=$GREENLIGHT_DB_DSN up

接下来的内容将是激活token的创建,以及向用户发送激活token等,将在下一篇文章中呈现。

上一篇下一篇

猜你喜欢

热点阅读