项目笔记第二天 | 青训营笔记

91 阅读3分钟
这是我参与「第五届青训营 」伴学笔记创作活动的第11天。

今日主要是把登录注册功能简单做一下,因为那个发布视频功能必须要检测该账号是否存在,而usersLoginInfo默认的账号数据只有zhanglei。因此这里打算添加一个账号密码的数据表,每次启动读取全部账号密码。

一、新建数据表

这里id就作为外键连接Users数据表,里面存放的是之前的用户关注数、被关注数等相关信息。这张表主要的功能只是存放账号密码。

1.jpg

下面是访问该表相关的结构体。

type login struct {
    Id            int64      `json:"id,omitempty"`
    Name          string     `json:"name,omitempty"`
    Password      string     `json:"password,omitempty"`
}

二、登录账号

由于前面登录账户返回的信息主要是用户id和权限token。而且根据下图得知,任何访问视频相关的操作都要通过token来确认权限。判断用户是否存在是通过token来确定的,而token参数是用户名加账号密码来组成的。

2.jpg

3.jpg

读取登录数据表。这里usersLoginInfo保存数据库中的用户数据,key是用户名加密码,value是User信息。我把这段代码直接放在InitVideo方法里面,与视频读取放在一起。

db.Find(&DemoLogins)
db.Find(&DemoUsers)
for i := 1; i<= int(len(DemoUsers)); i++ {
    toke := DemoLogins[i-1].Name + DemoLogins[i-1].Password
    usersLoginInfo[toke] = DemoUsers[i-1]
}

三、注册用户信息

这里是注册新用户时候新建的用户信息,由于前面判断语句已经判断注册用户时该用户名是否存在,这里只需要直接新增User对象和login对象然后保存到数据库中,userCreate是用于数据库中新增数据的方法。这里token是用户名加密码的string类型数据。

newUser := User{
    Id:   	int64(len(DemoUsers)+1),
    Name: 	username,
    FollowCount: 0,
    FollowerCount: 0,
    IsFollow: false,
}
usersLoginInfo[token] = newUser
newLogin := login{
    Id: int64(len(DemoUsers)+1),
    Name: username,
    Password: password,
}
userCreate(newUser, newLogin)

userCreate方法,其中这里dsn根据实际数据库信息修改参数,包括用户名密码、ip地址和数据表信息。这里db.Create方法直接在Users表和logins表分别保存用户的账号信息和登录信息。

func userCreate(newUser User, newLogin login) error {
    dsn := "username:password@tcp("+IpAddress+":3306)/douyin?charset=utf8&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
            fmt.Println(err)
            fmt.Println("failed to connect database")
            return err
    }

    db.Model(&User{}).Create(&newUser)
    db.Model(&login{}).Create(&newLogin)
    return nil
}

总结

这里用户登录注册功能比较简单。但是目前遇到的问题比较大,无论我打开哪个用户,显示的视频发布都是服务端存储的所有视频数据。我预计这里是把DemoVideos里面的视频列表全部都遍历一遍了,后续可以通过AuthorId来判断这些视频的作者去分类。这里我觉得视频数据保存有一些问题。不同用户视角点赞视频,看到的都是不一样的,那视频列表中Video的IsFavarite参数中不同用户也是不一样的。感觉现在大方向就有点问题。