diff --git a/main.go b/main.go
index 2e37203..21a0643 100644
--- a/main.go
+++ b/main.go
@@ -25,11 +25,12 @@ func main() {
 }
 
 type gloableConfig struct {
-	UserStoreConfig userstore.Config      `env:", prefix=USERSTORE_"`
-	Port            int                   `env:"PORT, default=8080"`
-	SMTPConfig      smtpclient.SMTPConfig `env:", prefix=SMTP_"`
-	WebConfig       web.WebConfig         `env:", prefix=WEB_"`
-	DummyDatabase   bool                  `env:"DUMMY_DATABASE"`
+	UserStoreConfig userstore.Config        `env:", prefix=USERSTORE_"`
+	Port            int                     `env:"PORT, default=8080"`
+	SMTPConfig      smtpclient.SMTPConfig   `env:", prefix=SMTP_"`
+	WebConfig       web.WebConfig           `env:", prefix=WEB_"`
+	MiniauthConfig  miniauth.MiniauthConfig `env:", prefix=MINIAUTH_"`
+	DummyDatabase   bool                    `env:"DUMMY_DATABASE"`
 }
 
 func config() gloableConfig {
@@ -71,7 +72,7 @@ func setupRouter(cfg gloableConfig) *gin.Engine {
 
 	sc := smtpclient.NewSMTPClient(cfg.SMTPConfig)
 
-	ma := miniauth.NewMiniauth(us, sc)
+	ma := miniauth.NewMiniauth(cfg.MiniauthConfig, us, sc)
 
 	webServer := web.NewWeb(cfg.WebConfig, ma)
 	webServer.RegisterRoutes(routesWeb)
diff --git a/pkg/miniauth/error.go b/pkg/miniauth/error.go
index e3b8aaf..8a401ee 100644
--- a/pkg/miniauth/error.go
+++ b/pkg/miniauth/error.go
@@ -9,4 +9,5 @@ var (
 	ErrMailAddressInvalide      = errors.New("email address invalide")
 	ErrCantCreateUser           = errors.New("cant create user")
 	ErrCantSendMail             = errors.New("cant send mail")
+	ErrLoginFailed              = errors.New("cant login")
 )
diff --git a/pkg/miniauth/miniauth.go b/pkg/miniauth/miniauth.go
index 54b26ea..25436d1 100644
--- a/pkg/miniauth/miniauth.go
+++ b/pkg/miniauth/miniauth.go
@@ -12,13 +12,18 @@ import (
 	"github.com/rs/zerolog"
 )
 
-type Miniauth struct {
-	store userstore.Store
-	log   zerolog.Logger
-	smtp  smtpclient.SMTPClient
+type MiniauthConfig struct {
+	LoginWithNotApprovedMail bool `env:"LOGIN_WITH_NOT_APPROVED_MAIL"`
 }
 
-func NewMiniauth(us userstore.Store, sm smtpclient.SMTPClient) Miniauth {
+type Miniauth struct {
+	store  userstore.Store
+	log    zerolog.Logger
+	smtp   smtpclient.SMTPClient
+	config MiniauthConfig
+}
+
+func NewMiniauth(conf MiniauthConfig, us userstore.Store, sm smtpclient.SMTPClient) Miniauth {
 	m := Miniauth{}
 	m.store = us
 	m.smtp = sm
@@ -73,6 +78,16 @@ func (m Miniauth) RegisterUser(username string, email string, password string) e
 	return nil
 }
 
+func (m Miniauth) UserLogin(username, password string) error {
+	log := m.log.With().Str("func", "RegisterUser").Str("username", username).Logger()
+	_, err := m.store.UserCheckPassword(username, password)
+	if err != nil {
+		return utils.WrapError(ErrLoginFailed, err, log)
+	}
+
+	return nil
+}
+
 func (m Miniauth) checkPasswordForRegistration(password string) error {
 	passwordValidator := validator.New(
 		validator.MinLength(15, nil),
diff --git a/pkg/miniauth/miniauth_test.go b/pkg/miniauth/miniauth_test.go
index 024ae29..d8b43a7 100644
--- a/pkg/miniauth/miniauth_test.go
+++ b/pkg/miniauth/miniauth_test.go
@@ -183,11 +183,61 @@ func TestUserAndMailIsDeletedIfMailCantBeSend(t *testing.T) {
 	assert.False(t, res, "should not found user")
 }
 
+func TestLogin(t *testing.T) {
+	ma := getMiniAuth(t)
+	err := ma.RegisterUser("kekskurser", "foobar@example.com", "oDzry!!!YPEtHuofKE9hnea8TLTe2Doabi6ddy")
+	assert.Nil(t, err)
+
+	tts := []struct {
+		name            string
+		username        string
+		password        string
+		ExpectErr       error
+		EcpectErrString string
+		config          MiniauthConfig
+	}{
+		{
+			name:     "login-successfull",
+			username: "kekskurser",
+			password: "oDzry!!!YPEtHuofKE9hnea8TLTe2Doabi6ddy",
+		},
+		{
+			name:            "login-failed-user-not-found",
+			username:        "kekstest",
+			password:        "oDzry!!!YPEtHuofKE9hnea8TLTe2Doabi6ddy",
+			ExpectErr:       ErrLoginFailed,
+			EcpectErrString: "cant login: cant execute query: sql: no rows in result set",
+		},
+		{
+			name:            "login-failed-user-not-found",
+			username:        "kekskurser",
+			password:        "oDzry!!!YPEtHuofKE9hnea8TLTe2Doabi6ddyTEST",
+			ExpectErr:       ErrLoginFailed,
+			EcpectErrString: "cant login: user password dont match: crypto/bcrypt: hashedPassword is not the hash of the given password",
+		},
+	}
+
+	for _, tt := range tts {
+		t.Run(tt.name, func(t *testing.T) {
+			ma.config = tt.config
+			err := ma.UserLogin(tt.username, tt.password)
+			if tt.ExpectErr == nil {
+				assert.Nil(t, err)
+				return
+			}
+			assert.ErrorIs(t, err, tt.ExpectErr)
+			assert.Equal(t, tt.EcpectErrString, err.Error())
+		})
+	}
+}
+
 func getMiniAuth(t *testing.T) Miniauth {
 	us, err := userstore.NewDummyStore()
 	assert.Nil(t, err, "[setup] should be abel to creat dummy store")
 
+	config := MiniauthConfig{}
+
 	sc := smtpclient.NewDummySMTPClient()
-	m := NewMiniauth(us, sc)
+	m := NewMiniauth(config, us, sc)
 	return m
 }
diff --git a/pkg/web/web_test.go b/pkg/web/web_test.go
index eccb3df..ba70a1a 100644
--- a/pkg/web/web_test.go
+++ b/pkg/web/web_test.go
@@ -17,10 +17,12 @@ func TestRegistrationDisabled(t *testing.T) {
 	webConfig := WebConfig{}
 	webConfig.PublicRegistration = false
 
+	config := miniauth.MiniauthConfig{}
+
 	us, err := userstore.NewDummyStore()
 	assert.Nil(t, err, "[setup] should be abel to create userstore")
 	sc := smtpclient.NewDummySMTPClient()
-	web := NewWeb(webConfig, miniauth.NewMiniauth(us, sc))
+	web := NewWeb(webConfig, miniauth.NewMiniauth(config, us, sc))
 
 	router := gin.New()
 	loadTemplates(router)
@@ -40,10 +42,12 @@ func TestRegistrationDisabledOnPost(t *testing.T) {
 	webConfig := WebConfig{}
 	webConfig.PublicRegistration = false
 
+	config := miniauth.MiniauthConfig{}
+
 	us, err := userstore.NewDummyStore()
 	assert.Nil(t, err, "[setup] should be abel to create userstore")
 	sc := smtpclient.NewDummySMTPClient()
-	web := NewWeb(webConfig, miniauth.NewMiniauth(us, sc))
+	web := NewWeb(webConfig, miniauth.NewMiniauth(config, us, sc))
 
 	router := gin.New()
 	loadTemplates(router)