[2.0] Logowanie nie do końca działa.

Ogólnie sytuacja wygląda tak. Utworzyłem kontroler, który ma akcję logowanie, ładuje model uzytkownik, który ma akcje zaloguj, akcja ta laduje model tozsamosc, który jest rozszerzeniem ‘yii\web\IdentityInterface’, gdzie wyszukuje uzytkownika, porownuje haslo i w przpadku znalezienia delikwenta wykonuje logowania Yii::$app->user->login($this,3600)

I tyle mniejwięcej wystarczało w Yii 1.1. Chwilowo bez kodu, czysto do rozważenia. Czy czegoś gdzieś po drodze nie dodałem ? Nie skonfigurowałem ?

Zalogować się mogę do pierwszego odświeżenia strony - dziwne dla mnie trochę i powoli iytujące. Acz - może ktoś rzuci hasłem za czym mam się dokładniej rozejrzeć.

Controller




<?php

namespace app\controllers;


use Yii;

use yii\web\Controller;


use app\models\Uzytkownik;


class StronaController extends Controller {

	

	public function actionIndex(){

		return $this->render('index');

	}

	

	public function actionAbout(){

		return $this->render('index');

	}

	

	public function actionLogowanie(){

		$uzytkownik = new Uzytkownik;

		

		if ( Yii::$app->request->post('Uzytkownik') ){

			$uzytkownik->attributes = Yii::$app->request->post('Uzytkownik');

			if ( $uzytkownik->zaloguj() ){

				echo 'użytkownik znaleziony i haslo jest OK.';

			} else {

				echo 'bledne dane logowanie lub cos innego nie tak';

			}

		}

		

		return $this->render('logowanie', [

			'model' => $uzytkownik,

		]);

	}

	

	public function actionWyloguj(){

		//Uzytkownik::wyloguj();

		//$this->redirect('/');

	}

	

}

?>



Uzytkownik - model




<?php


namespace app\models;


//use yii\base\Model;

use Yii;

use yii\db\ActiveRecord;


class Uzytkownik extends ActiveRecord

{

    public $nazwa;

    public $haslo;

	

	private $tozsamosc = null;

	

	public function attributeLabels(){

		return [

			'nazwa' => 'Login',

			'haslo' => 'Haslo',

		];

	}

	

	public function rules()

    {

        return [

            // username and password are both required

            [['nazwa', 'haslo'], 'required', 'message' => 'Pole {attribute} nie może być puste.'],

        ];

    }

	

	public static function tableName(){

		return 'uzytkownicy';

	}

	

	public function zaloguj(){		

		$osoba = $this->findByCondition([

			'nazwa' => $this->nazwa,

			'haslo' => md5($this->haslo),

		], true);

		

		//$this->tozsamosc = new Tozsamosc($osoba);

		$this->tozsamosc = new Tozsamosc([

			'nazwa' => $this->nazwa,

			'haslo' => md5($this->haslo),

		]);

		

		if ( $this->validate() AND $osoba){

			$this->tozsamosc->zaloguj();

		} else {

			// jeszcze nie wiem co else

		}

		return $osoba;

	}

	

	public static function wyloguj(){

		

	}

}



Tozsamowsc - model




<?php

namespace app\models;


use yii\web\IdentityInterface;

use yii\base\Model;

use yii;


class Tozsamosc extends Model implements IdentityInterface{


	public $nazwa;

	public $haslo;

	public $id;

	public $authkey;

	

	public function zaloguj(){

		Yii::$app->user->login($this,3600);

	}

	

	public static function findIdentity($id)    {

      return Uzytkownik::findByCondition([

				'id' => $id

			]);

    }


    public static function findIdentityByAccessToken($token, $type = null)    {

        return static::findOne(['access_token' => $token]);

    }


    public function getId()    {

        return $this->id;

    }


    public function getAuthKey()    {

        return $this->authKey;

    }


    public function validateAuthKey($authKey)    {

        return $this->authKey === $authKey;

    }

}

?>



Przekazujesz w metodzie zaloguj $this a tak laicko zapytam gdzie konstruktor?

bo


$this->tozsamosc = new Tozsamosc([

                        'nazwa' => $this->nazwa,

                        'haslo' => md5($this->haslo),

                ]);

to nie jest __construct ?

Bo nie kojarzę (dopiero jestem sempai) __construct w Interfejsie i wątpię żeby rozszerzenie Modelu miało konstruktor przyjmujący takie dane

ja bym to sklecił coś w kierunku:




$tozsamosc = new Tozsamosc([

                        'nazwa' => $this->nazwa,

                        'haslo' => md5($this->haslo),

                ]);






function public __construct(nazwa hasło)

parent



p…s . po trzech piwach dzis nie będę pisał dokładnie rano poprawie, chyab że rob006 albo Bizley Ci to wytłumaczą ja dopiero się uczę.

Może jest tak jak mówisz, jednak chciałbym zwrócić uwage, że NavBar skopiowany z przykładowej aplikacji pokazuje idealnie wyloguj([NAZWA_UZYTKOWNIKA]) to momentu przeladowania strony gdzie zmienia sie znów w ZALOGUJ.

To na co zwracasz uwagę czyli $this->tozsamosc / $tozsamosc to dodatkowo zwróć uwagę, że deklaruje pole private $tozsamosc więc stąd mi się wzięło $this->tozsamowsc = new Tozsamosc();

gdzie http://www.yiiframework.com/doc-2.0/yii-base-object.html#__construct()-detail jest konstruktor i tak właśnie - moim zdaniem - powinno przekazywać się wartości.

Nie bawiłem się jeszcze yii2, ale czy nie powinieneś dodać ‘use app\models\Tozsamosc;’ w Uzytkownik?

Nie wydaje mi się. Jakby nie miał zasięgu do Tozsamosc to by rzucil bledem ze nie widzi klasy.

PS. Może naprostujecie mój tok myślenia. Jestem świeży, zarówno w Yii jak i w Yii2. Jak wiecie 2.0 jest już wydane. Stąd moje pytanie. Uczyć się od razu 2.0 czy pozostać przy 1?

Ach, racja, Uzytkownik jest w tym samym namespace.

Skoro dopiero zaczynasz, to pewnie lepiej poświęcić czas na v2. Jedynka w pewnym momencie przestanie być wspierana i tak.

Też właśnie jestem tego zdanie. Napisałem parę kontrolerów i mini aplikacyjke w v1 i teraz próbuję przepisać to na v2. Jednak przy autentykacji uzytkownika mi już ręcę opadają a internet jeszcze nie jest wypełniony takimi problemami :( I jak tu żyć ? Ręce opadają.