qor / auth

Golang Authentication solution
MIT License
715 stars 100 forks source link

Password with Registration Fails #16

Open danforbes opened 5 years ago

danforbes commented 5 years ago

I am unable to register a new user with a password. The UI states invalid account. The server output states (pq: missing FROM-clause entry for table "basics"). I am using code inspired by this project's README.md.

package main

import (
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/postgres"
    "github.com/qor/auth"
    "github.com/qor/auth/auth_identity"
    "github.com/qor/auth/providers/password"
    "github.com/qor/session/manager"

    "net/http"
)

var (
    // Initialize gorm DB
    gormDB, _ = gorm.Open("postgres", "host=localhost port=5432 user=postgres dbname=postgres password=postgres sslmode=disable")

    // Initialize Auth with configuration
    Auth = auth.New(&auth.Config{
        DB: gormDB,
    })
)

func init() {
    // Migrate AuthIdentity model, AuthIdentity will be used to save auth info, like username/password, oauth token, you could change that.
    gormDB.AutoMigrate(&auth_identity.AuthIdentity{})

    // Register Auth providers
    // Allow use username/password
    Auth.RegisterProvider(password.New(&password.Config{}))
}

func main() {
    mux := http.NewServeMux()

    // Mount Auth to Router
    mux.Handle("/auth/", Auth.NewServeMux())
    http.ListenAndServe(":8080", manager.SessionManager.Middleware(mux))
}
lutfuahmet commented 5 years ago

there is a bug about table name which prevent login,register ...

I have a server which have old version of qor, there is no error like this. but I tried to install new qor version on other server, I faced up same issue. I fixed issue via editing library files.

xnamahx commented 5 years ago

I have the same. Solved with #15

gstvg commented 5 years ago

@jinzhu

gstvg commented 5 years ago

Hotfix: type hotfixedAuthIdentity auth_identity.AuthIdentity func(hotfixedAuthIdentity) TableName() string {return "basics"}

To use custom auth model without having to editing library files, name your user struct "Basics" or define a method TableName() string{return "basics"}, like above. I dont tested #15 yet, but for me it seems like only works when you are using the default auth model: auth_identity.AuthIdentity() The right fix would be "tx.Model(...).Where("provider = ? ", authInfo.Provider).Where("uid = ?", authInfo.UID)"

sergolius commented 4 years ago

Please see https://github.com/qor/auth/issues/12#issuecomment-524820403

We faced this issue when upgraded GORM from v1.9.1 to v1.9.10. Downgrading back fixed the issue.

p.s. This issue appears because GORM v1.9.2 changed behaviour and lack of dependency management in QOR. p.s.s. It's up to you to don't use defaults (handlers, renderers, etc). Also there is not sense to modify original QOR files, because there is opportunity to override behaviour via config.

sacarr commented 4 years ago

I encountered similar problems with g01.13.4 darwin/amd64 while experimenting with the QOR Example server. I was seeing pq: missing FROM-clause entry for table "basics" in server logs. The messages were coming from

I resolved the problem by modifying each of the files. I changed the where() calls similarly in each file to this example from handlers.go line 27

if tx.Model(context.Auth.AuthIdentityModel).Where(authInfo).First(authIdentity).RecordNotFound()

to

if tx.Model(context.Auth.AuthIdentityModel).tx.Where("UID = ?", authInfo.UID).First(authIdentity).RecordNotFound()
ghost commented 4 years ago

I created a fork of qor where I committed several fixes/pull requests to make it work. Available at, https://github.com/qorpress/qorpress-auth-example