Nama pengguna atau kata sandi selalu salah.- Yii2

Saya telah menginstal aplikasi tingkat lanjut Yii2, saya menyesuaikan pendaftaran sesuai dengan database pengguna saya. Setelah mendaftar saya mencoba login dan tertulis "Incorrect username or password", kata sandi saya qwerty juga saya sudah memeriksanya berkali-kali dan masih tidak berhasil.

Tabel Pengguna

Seperti yang Anda lihat di sini, informasi pengguna setelah mendaftar mencatat data ke tabel pengguna.

Model pendaftaran

class SignupForm extends Model
{
public $username;
public $email;
public $password;
public $first_name;
public $middle_name;
public $last_name;
public $contact;
public $birth_date;
public $type;
public $external_type;
public $status;
public $region_id;
public $barangay_id;
public $province_id;
public $city_municipal_id;


/**
 * {@inheritdoc}
 */
public function rules()
{
    return [
        ['username', 'trim'],
        ['username', 'required'],
        ['username', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This username has already been taken.'],
        ['username', 'string', 'min' => 2, 'max' => 255],

        ['email', 'trim'],
        ['email', 'required'],
        ['email', 'email'],
        ['email', 'string', 'max' => 255],
        ['email', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This email address has already been taken.'],

        ['password', 'required'],
        ['password', 'string', 'min' => 6],

        ['first_name', 'required'],
        ['first_name', 'string', 'max' => 45],

        ['middle_name', 'string', 'max' => 45],

        ['last_name', 'required'],
        ['last_name', 'string', 'max' => 45],

        ['contact', 'required'],
        ['contact', 'string', 'max' => 11],

        ['birth_date', 'required'],

        ['type', 'required'],
        ['type', 'string', 'max' => 45],

        ['external_type', 'string', 'max' => 45],

        ['status', 'string', 'max' => 45],

        ['region_id', 'required'],
        ['barangay_id', 'required'],
        ['province_id', 'required'],
        ['city_municipal_id', 'required'],
    ];
}

/**
 * Signs user up.
 *
 * @return User|null the saved model or null if saving fails
 */
public function signup()
{
    if (!$this->validate()) {
        return null;
    }

    $user = new User();
    $user->username = $this->username;
    $user->email = $this->email;
    $user->setPassword($this->password);
    $user->generateAuthKey();

    $user->first_name = $this->first_name;
    $user->middle_name = $this->middle_name;
    $user->last_name = $this->last_name;
    $user->contact = $this->contact;
    $user->birth_date = $this->birth_date;
    $user->type = $this->type;
    $user->external_type = $this->external_type;
    $user->status = $this->status;
    $user->region_id = $this->region_id;
    $user->barangay_id = $this->barangay_id;
    $user->province_id = $this->province_id;
    $user->city_municipal_id = $this->city_municipal_id;

    return $user->save() ? $user : null;
}
}

Di mana kesalahan saya di sini? Ini membingungkan. Saya pikir tidak ada yang salah dalam kode saya karena saya mengikuti pengaturan instalasi Aplikasi Yii2 Advanced yang benar.

Model Masuk

public function login()
{
    if ($this->validate()) {
        return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
    }

    return false;
}

person noobkoder    schedule 14.03.2018    source sumber
comment
Pertama-tama, instalasi Yii2 yang benar tidak ada hubungannya dengan kesalahan kode Anda. Kedua - Anda menempelkan fungsi signup() saja di sini, jadi bagaimana kami dapat menyelesaikan masalah Anda jika Anda bertanya tentang login()?   -  person Yupik    schedule 14.03.2018
comment
Karena saat mendaftar yii2 membuat pengguna sudah login kan? Tapi setelah mendaftar itu mengarahkan saya ke halaman indeks dan pengguna tidak login. Saya sudah mencoba menggunakan tabel pengguna default menggunakan migrasi yii dan berfungsi dengan baik tetapi ketika saya menggunakan tabel pengguna saya sendiri tidak berhasil lagi.   -  person noobkoder    schedule 14.03.2018
comment
Saya tidak melihat pengguna masuk setelah mendaftar di kode Anda. Perbarui pertanyaan Anda dengan kode yang tepat, saat ini kami tidak dapat membantu Anda.   -  person Yupik    schedule 14.03.2018
comment
Saya rasa hanya itu kode yang bisa saya berikan, saya hanya mengkustomisasi atribut model SignupForm sesuai dengan kolom tabel pengguna. Terima kasih   -  person noobkoder    schedule 14.03.2018
comment
tambahkan fungsi singup/daftar dari pengontrol Anda   -  person Muhammad Omer Aslam    schedule 14.03.2018


Jawaban (3)


periksa tabel pengguna Anda di phpmyadmin, lihat kolom status, jika nilainya tidak sama dengan 10, Anda dapat mengubahnya dengan 10.

person Mahmut Aydın    schedule 12.09.2019

Meskipun Anda belum menambahkan tindakan untuk pendaftaran atau pendaftaran, tetapi saat Anda memanggil fungsi $model->signup() dari model, Anda harus memeriksanya di dalam pernyataan if dan kemudian menambahkan panggilan ke \Yii::$app->user->login($userModel); di dalam, Anda akan login setelahnya mendaftar.

Fungsi signup() Anda mengembalikan objek model pengguna setelah memasukkan pengguna ke dalam tabel.

Lihat contoh kode di bawah ini

if(($userModel=$model->signUp())!==null){
   \Yii::$app->user->login($userModel);
}

Semoga ini bisa membantu Anda

person Muhammad Omer Aslam    schedule 14.03.2018
comment
Sebenarnya sudah ada di SiteController pastebin.com/NBJuse8X - person noobkoder; 15.03.2018
comment
@noobkoder dapatkah Anda menambahkan fungsi $user->setPassword(); meskipun saya dapat melihat kata sandi di-hash di tabel, dan ketika Anda diarahkan ke halaman login setelah mendaftar apakah itu menampilkan pesan nama pengguna/kata sandi yang salah? coba tambahkan var_dump($this->validate()) dan print_r($this->attributes) di dalam fungsi login() dan lihat apa yang dicetaknya. - person Muhammad Omer Aslam; 15.03.2018
comment
Setelah mendaftar itu mengarahkan saya ke halaman indeks tetapi pengguna tidak masuk, tetapi jika saya mencoba masuk dikatakan kredensialnya salah. - person noobkoder; 16.03.2018

Sudahkah Anda mencoba mengatur kelas model pengguna Anda untuk mengimplementasikan antarmuka identitas?

Pertama nyatakan kelas Anda seperti itu

class MyUser extends ActiveRecord implements IdentityInterface

sekarang di suatu tempat di kelas Anda, Anda perlu menerapkan metode ini

public static function findIdentity($id)
    {
        return self::findOne(['id'=>$id]);
    }

    public static function findIdentityByAccessToken($token, $type = null)
    {
        throw new NotSupportedException("Validation method not supported as of yet.");
    }

    public function getId()
    {
        return $this->id;
    }

    public function getAuthKey()
    {
        return $this->auth_key;
    }

    public function validateAuthKey($authKey)
    {
        return $this->auth_key === $authKey;
    }

selanjutnya pergi ke bagian komponen Anda /config/web.php dan cari komponen 'user'

'user' => [
        'identityClass' => 'app\models\MyUser', //<---Your model class
        'enableAutoLogin' => true,
    ],

Saya pikir dengan itu Anda baik-baik saja. Beri tahu saya jika ini tidak berhasil.

person natral    schedule 14.03.2018
comment
Yang ini sudah otomatis ada di Kelas Pengguna Tingkat Lanjut Yii2 - person noobkoder; 15.03.2018