2amigos / yii2-usuario

Highly customizable and extensible user management, authentication, and authorization Yii2 extension
https://github.com/2amigos/yii2-usuario
Other
294 stars 142 forks source link

custom fields in user/registration/connect page #418

Open srakl opened 3 years ago

srakl commented 3 years ago

After a user registers with their social account. they are redirected to user/registration/connect

i've removed username from the form and added firstname lastname. when i click "continue" the user is loged in but friestname and lastname is not saved in the users table. how to i make it save their firstname lastname? which file is it in? Thanks

srakl commented 3 years ago

i tried adding it manually in the registrationcontroller.php


    public function actionConnect($code)
    {
        /** @var SocialNetworkAccount $account */
        $account = $this->socialNetworkAccountQuery->whereCode($code)->one();

        $this->on(
            SecurityController::class, SocialNetworkAuthEvent::EVENT_BEFORE_AUTHENTICATE, function (SocialNetworkAuthEvent $event) {
                $client = $event->getClient();
                $account = $event->getAccount();

                if ($account->user === null || !$account->user instanceof User) {

                    /** @var User $user */
                    $user = $event->sender->make(
                        User::class,
                        [],
                        [
                            'scenario' => 'connect',
                            'username' => null,
                            //'username' => $account->username,
                           // 'firstname' => $account,
                            'email' => $account->email,
                        ]
                    );

                    if (!$user->validate(['email'])) {
                        $user->email = null;
                    }

                    $mailService = MailFactory::makeWelcomeMailerService($user);

                    if ($event->sender->make(UserCreateService::class, [$user, $mailService])->run()) {
                        $account->user_id = $user->id;
                        $account->save(false);
                    }
                }
        });

        //added 
        $user = Json::decode($account->data);
        $firstname = $user['given_name'];
        $lastname = $user['family_name'];
        $picture = $user['picture'];

        /** @var User $user */
        $user = $this->make(
            User::class,
            [],
            ['scenario' => 'connect', 'email' => $account->email, 'firstname' => $firstname, 'lastname' => $lastname]
        );

        $event = $this->make(SocialNetworkConnectEvent::class, [$user, $account]);

        $this->make(AjaxRequestModelValidator::class, [$user])->validate();

        if ($user->load(Yii::$app->request->post()) && $user->validate()) {

            $this->trigger(SocialNetworkConnectEvent::EVENT_BEFORE_CONNECT, $event);

            $mailService = MailFactory::makeWelcomeMailerService($user);

            if ($this->make(UserCreateService::class, [$user, $mailService])->run()) {

                /*
                * added
                */

                $firstname =$_POST['User']['firstname'];
                $lastname = $_POST['User']['lastname'];

                $_user = User::find()->where('email=:email', [':email' => $account->email])->one();
                $_user->firstname = $firstname;
                $_user->lastname = $lastname;
                $_user->save(false);

                $account->connect($user);

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

                return $this->goBack();
            }
        }

        return $this->render(
            'connect',
            [
                'model' => $user,
                'account' => $account,
                'firstname' => $firstname,
                'lastname' => $lastname,
                'picture' => $picture
            ]
        );
    }

but it still doesn't update user table with firstname and last name. how do i get this to work?

srakl commented 3 years ago

anyone?? i'm still stuck on this. I also have this in my user model


/**
     * {@inheritdoc}
     */
    public function scenarios()
    {
        return ArrayHelper::merge(
            parent::scenarios(),
            [
                'register' => ['email', 'password', 'firstname', 'lastname'],
                'connect' => ['email', 'firstname', 'lastname'], //social connect
                'create' => ['email', 'password', 'firstname', 'lastname'],
                'update' => ['email', 'password', 'firstname', 'lastname'],
                'settings' => ['email', 'password', 'firstname', 'lastname'],
            ]
        );
    }

        /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            // email rules
            'emailRequired' => ['email', 'required', 'on' => ['register', 'connect', 'create', 'update']],
            'emailPattern' => ['email', 'email'],
            'emailLength' => ['email', 'string', 'max' => 255],
            'emailUnique' => [
                'email',
                'unique',
                'message' => Yii::t('usuario', 'This email address has already been taken'),
            ],
            'emailTrim' => ['email', 'trim'],

            // password rules
            'passwordTrim' => ['password', 'trim'],
            'passwordRequired' => ['password', 'required', 'on' => ['register']],
            'passwordLength' => ['password', 'string', 'min' => 6, 'max' => 72, 'on' => ['register', 'create']],

            //firstname
            'firstnameLength' => ['firstname', 'string', 'min' => 3, 'max' => 255],
            'firstnameTrim' => ['firstname', 'filter', 'filter' => 'trim'],
            'firstnamePattern' => ['firstname', 'match', 'pattern' => '/^\p{L}+$/u'],
            'firstnameRequired' => ['firstname', 'required', 'on' => ['register', 'connect', 'create', 'update']],

            //lastname
            'lastnameLength' => ['lastname', 'string', 'min' => 3, 'max' => 255],
            'lastnameTrim' => ['lastname', 'filter', 'filter' => 'trim'],
            'lastnamePattern' => ['lastname', 'match', 'pattern' => '/^\p{L}+$/u'],
            'lastnameRequired' => ['lastname', 'required', 'on' => ['register', 'connect', 'create', 'update']],

            'safeRules'  => [['email', 'firstname', 'lastname'], 'safe'],

            // two factor auth rules
            'twoFactorSecretTrim' => ['auth_tf_key', 'trim'],
            'twoFactorSecretLength' => ['auth_tf_key', 'string', 'max' => 16],
            'twoFactorEnabledNumber' => ['auth_tf_enabled', 'boolean']
        ];
    }
srakl commented 3 years ago

anyone??!!