Вопрос

HI I am new to Kohana I am trying to use twitter sign in module, I can access the twitter info, but while registering I am using Auth orm registration (I have extended my user model with Model_Auth_User or else it gives problem while logging in ), but while registration, as twitter doesnt provide email (This is the problem that I think ) the validation fails , I need to know if I can remove the validation for required email field

I am adding my code for reference

if(!empty($_GET['oauth_verifier']) && Session::instance()->get('oauth_token') && Session::instance()->get('oauth_token_secret'))
        {
            $twitteroauth = new TwitterOAuth(Kohana::$config->load('apiKey.twitter.TWITTER_CONSUMER_KEY'),Kohana::$config->load('apiKey.twitter.TWITTER_CONSUMER_SECRET'),Session::instance()->get('oauth_token'),Session::instance()->get('oauth_token_secret'));
            $access_token = $twitteroauth->getAccessToken($_GET['oauth_verifier']);

            $user_info = $twitteroauth->get('account/verify_credentials');

            if(isset($user_info->error))
            {
                show_error("Some error has occured.");
            }
            else
            {
                $model = ORM::factory('user');

                $result = $model->where('twitter_id','=', $user_info->id)->find();

                if(!$result->id)
                {
                    $name = explode(' ',$user_info->name);
                    $model = ORM::factory('user');
                    $data['twitter_id'] = $user_info->id;
                    $data['first_name'] = $name[0];
                    $data['last_name'] = $name[1];
                    $data['username'] = $user_info->screen_name;                
                    $data['password'] = Auth::instance()->hash_password($user_info->screen_name);               
                    $model->values($data);
                    $result = $model->save();
                    $role = ORM::factory('role')->where('name', '=', 'login')->find();
                    $model->add('roles', $role);
                }


                if($result->id)
                {
                    //creating new ORM instance to use the result id 

                    $model = ORM::factory('user');
                    $user =  $model->find($result->id);
                    Auth::instance()->login($user->username,Auth::instance()->hash_password($user->username));
                    //Session::instance()->set('id', $model->id);
                    HTTP::redirect('user/dashboard');
                }
                else
                {
                    HTTP::redirect('/');
                }
            }
        }
        else
        {
            $twitteroauth = new TwitterOAuth(Kohana::$config->load('apiKey.twitter.TWITTER_CONSUMER_KEY'),Kohana::$config->load('apiKey.twitter.TWITTER_CONSUMER_SECRET'));

            $request_token = $twitteroauth->getRequestToken(URL::site());
            $url = $twitteroauth->getAuthorizeURL($request_token['oauth_token']);

            Session::instance()->set('oauth_token',$request_token['oauth_token']);
            Session::instance()->set('oauth_token_secret', $request_token['oauth_token_secret']);


            HTTP::redirect($url);
        }
Это было полезно?

Решение

I got the solution for my problem. I had to overwrite the rules function under Model_auth_user in Model_user

following is my MOdel_user

<?php defined('SYSPATH') or die('No direct script access.');

class Model_User extends Model_Auth_User {


    public function rules()
    {
        return array(
            'username' => array(
                array('not_empty'),
                array('max_length', array(':value', 32)),
                array(array($this, 'unique'), array('username', ':value')),
            ),
            'password' => array(
                array('not_empty'),
            ),
            'email' => array(
                array('email'),
                array(array($this, 'unique'), array('email', ':value')),
            ),
        );
    }


}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top