0

こんにちは、Kohana を初めて使用します。Twitter サインイン モジュールを使用しようとしています。Twitter 情報にアクセスできますが、登録中に Auth orm 登録を使用しています (ユーザー モデルを Model_Auth_User で拡張したか、ログイン中に問題が発生しました)。 、しかし、登録中に、Twitterは電子メールを提供しないため(これは私が思う問題です)検証が失敗するため、必須の電子メールフィールドの検証を削除できるかどうかを知る必要があります

参照用にコードを追加しています

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);
        }
4

1 に答える 1

0

私は私の問題の解決策を得ました。Model_user の Model_auth_user の下にあるルール関数を上書きする必要がありました

以下は私の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')),
            ),
        );
    }


}
于 2013-08-30T17:07:42.567 に答える