我的问题类似于我可以在数据库中保存哪些数据来验证使用 Google 登录 API 的用户?
我已经正确构建了 Google Sign In,并且从 API 收到了如下响应:
{
"iss":"https://accounts.google.com",
"at_hash":"xxx",
"aud":"xxx.apps.googleusercontent.com",
"sub":"xxx",
"email_verified":true,
"azp":"xxx.apps.googleusercontent.com",
"email":"xxx@gmail.com",
"iat":xxx,
"exp":xxx
}
Run Code Online (Sandbox Code Playgroud)
上面的 SO 链接表示保存子字段,因为这是唯一标识符。我可以保存电子邮件/子邮件,没有问题。我的问题是:如果该用户选择这样做,与 OAuth 相比,我如何允许他们下次使用电子邮件/密码表单登录?我想我可以强制他们通过 OAuth 登录,然后验证他们是否已登录并让他们创建密码,但我不知道这是否是最好的方法。
我有2个兄弟文件:main和test_two.每个文件分别是main.go和test_two.go文件.在一个我有一个自定义结构,而在另一个我想运行一个函数与该结构作为一个参数.我收到错误"undefined:Struct".
package main
import "github.com/user/test_two"
type Struct struct {
Fn string
Ln string
Email string
}
func main() {
foo := new(Struct)
foo.Fn = "foo"
foo.Ln = "bar"
foo.Email = "foo@bar.com"
test_two.Fn(foo)
Run Code Online (Sandbox Code Playgroud)
test_two.go:
package test_two
import (
"fmt"
)
func Fn(arg *Struct) {
fmt.Println(arg.Fn)
}
Run Code Online (Sandbox Code Playgroud) 我的导入如下所示:
import (
"testing"
"github.com/stretchr/testify/assert"
)
Run Code Online (Sandbox Code Playgroud)
当我尝试运行“ go test”时,出现错误消息:
cannot find package "github.com/stretchr/testify/assert" in any of:
/Users/[username]/go/src/github.com/[group_name]/[project_name]/vendor/github.com/stretchr/testify/assert (vendor tree)
/usr/local/go/src/github.com/stretchr/testify/assert (from $GOROOT)
/Users/[username]/go/src/github.com/stretchr/testify/assert (from $GOPATH)
FAIL github.com/[group_name]/[project_name]/lib/briteverify [setup failed]
Run Code Online (Sandbox Code Playgroud)
因此,似乎最后一行是问题所在,它在... / lib / briteverify中表示找不到github.com/stretchr/testify/assert。但是,我将此作为导入文件,所以不知道为什么会引发此错误。有什么想法吗?
我在拔出电子邮件域时遇到了麻烦。我试过使用
u, _ := url.Parse(email)
Run Code Online (Sandbox Code Playgroud)
和标准库中的其他解析,但似乎没有解析的内容:user@gmail.com分成单独的部分。
我也尝试过net.SplitHostPort,但是没有运气。
我不想创建一个函数,该函数在可能的情况下获取len并分开以在@符号后获取子字符串。
有人有任何想法可以做到这一点吗?
谢谢!
我有以下TestMain函数:
func TestMain(m *testing.M) {
db := "[working_db_connection]"
dbInstance, _ := InitializeRepo(db, 2)
runTests := m.Run()
os.Exit(runTests)
}
Run Code Online (Sandbox Code Playgroud)
以及样本测试
func TestSomeFeature(t *testing.T) {
fmt.Println(dbInstance)
}
Run Code Online (Sandbox Code Playgroud)
函数TestSomeFeature确实运行,但是说dbInstance是未定义的.为什么这不能访问变量?从示例中我可以看到使用此语法访问TestMain中的变量et.