0

我们正在运行两个最重要的服务器。

我们有一个 python 进程使用社区 Python 驱动程序使用个人访问令牌通过https://github.com/Vaelor/python-mattermost-driver登录。此过程有一个不会超时的会话,这是使用个人访问令牌登录的好处之一。 https://docs.mattermost.com/developer/personal-access-tokens.html

我们使用 client4 go 驱动程序使用用户名和密码登录,这可以正常工作,但是一段时间后会超时。似乎无法使用个人访问令牌通过官方客户端 4 驱动程序登录。

Mattermost Client4 代码的文档位于 https://godoc.org/github.com/mattermost/platform/model#Client

client4 的来源在https://github.com/mattermost/mattermost-server/blob/master/model/client4.go

看起来最接近的方法是使用用户名和密码登录,然后通过测试失败的 client.MockSession 设置身份验证令牌。

最重要的是,使用 client4 go 驱动程序使用个人访问令牌登录的官方方式是什么?

4

1 回答 1

0

关键是没有登录,设置个人访问令牌并调用client.GetMe。在查看了 python 驱动程序源代码后,这一点变得清晰起来。相关片段是。

    fmt.Println("LoginAsTheBotUser", "Using personal access token")
    client.AuthToken = mattermost_personal_access_token
    client.AuthType = model.HEADER_TOKEN
    if user, resp := client.GetMe(""); resp.Error != nil {
        println("There was a problem logging into the Mattermost server.  Are you sure the access token is valid?")
        PrintError(resp.Error)
    } else {
        fmt.Println(client)
        botUser = user
        result = true
    }

语境。

/* 
    mattermost_user_email, mattermost_user_password and mattermost_personal_access_token
    are globals set from reading a .env file on startup
    */
func LoginAsTheBotUser() bool {
    fmt.Println("LoginAsTheBotUser")
    fmt.Println("LoginAsTheBotUser", time.Now())
    var result bool = false
    if mattermost_personal_access_token == "" {
        fmt.Println("LoginAsTheBotUser", "Getting access token from login with username and password")
        if user, resp := client.Login(mattermost_user_email, mattermost_user_password); resp.Error != nil {
            println("There was a problem logging into the Mattermost server.  Are you sure ran the setup steps from the README.md?")
            PrintError(resp.Error)
        } else {
            fmt.Println(client)
            botUser = user
            result = true
        }
    } else {
        fmt.Println("LoginAsTheBotUser", "Using personal access token")
        client.AuthToken = mattermost_personal_access_token
        client.AuthType = model.HEADER_TOKEN
        if user, resp := client.GetMe(""); resp.Error != nil {
            //if user, resp := client.Login(mattermost_personal_access_token); resp.Error != nil {
            println("There was a problem logging into the Mattermost server.  Are you sure the access token is valid?")
            PrintError(resp.Error)
        } else {
            fmt.Println(client)
            botUser = user
            result = true
        }
    }
    fmt.Println("LoginAsTheBotUser", time.Now())
    fmt.Println("LoginAsTheBotUser")
    return result
}
于 2018-08-12T03:45:30.870 回答