如何防止facebook登录后弹出重定向url?

时间:2016-01-06 13:28:57

标签: oauth-2.0 yii2

这是我的控制器。

public function actions()
{
    return [           

        'auth' => [
          'class' => 'yii\authclient\AuthAction',
          'successCallback' => [$this, 'oAuthSuccess'],
        ],
    ];
}


public function oAuthSuccess($client) {

    $name = explode(" ",$userAttributes['name']);
    $existing_customer = Customer::find()
                ->where(['email' => $userAttributes['email']])
                ->orWhere(['id_facebook' => $userAttributes['id']])
                ->one();        

    if(empty($existing_customer)){

        $customer = new Customer();
        $customer->firstname = $name[0];
        $customer->lastname = $name[1];
        $customer->id_default_group = 3;
        $customer->username = $userAttributes['id'].'@facebook.com';
        $customer->id_facebook = $userAttributes['id'];
        $customer->email = $userAttributes['email'];
        $password = rand(0000, 9999);
        $auth_key = Yii::$app->getSecurity()->generateRandomString();
        $customer->auth_key = $auth_key;
        $hash = Yii::$app->getSecurity()->generatePasswordHash($password);
        $customer->password_hash = $hash; 
        $customer->activation_code = $password;
        $customer->active =1;

        if ($customer->save(false)) {      

            $customergroup = new CustomerGroup();    
            $customergroup->id_customer = $customer->id_customer;
            $customergroup->id_group = $customer->id_default_group;
            $customergroup->save(false);                

            Yii::$app->response->redirect(['advanced','email' => $customer->email]);
        }           
    }

这是我的main.php文件。

'authClientCollection' => [
        'class' => 'yii\authclient\Collection',
        'clients' => [
            'facebook' => [                   
                'class' => 'yii\authclient\clients\Facebook',
                'authUrl' => 'https://www.facebook.com/dialog/oauth?display=popup',
                'clientId' => '',
                'clientSecret' => '',                    
                'scope' => [
                    'email', 
                    'user_birthday',
                    'user_location', 
                    'user_hometown',                        
                ],
            ],                
        ],
    ],

其实我在2个过程中进行注册。 用户点击Facebook按钮后,它返回弹出窗口中的第二步,但我需要在我的网站中。怎么可能?

1 个答案:

答案 0 :(得分:1)

使用您想要的操作更改您的auth successCallBack动作功能..

下面的示例,其中successCallback检查用户是否为访客,如果为true则调用操作进行身份验证,否则操作连接

/** @inheritdoc */
public function actions()
{
    return [
        'auth' => [
            'class' => AuthAction::className(),
            'successCallback' => \Yii::$app->user->isGuest
                ? [$this, 'authenticate']
                : [$this, 'connect'],
        ]
    ];
} 

在facebook登录后,您将在oAuthSuccess函数中返回代码。我认为您正在查找的弹出窗口是在此函数内部,并从此重定向调用。如果你想要其他人改变这个功能的bootom部分..

Yii::$app->response->redirect(['advanced','email' => $customer->email]);
相关问题