我yii2-dektrium用来允许用户使用他们的 Facebook 帐户登录。
登录完成后,我需要从我的服务器发出 API 请求以获取用户帐户的数据。请求的一个示例是:
$client = Yii::$app->authClientCollection->getClient('facebook');
$response = $client->createApiRequest()
->setMethod('GET')
->setUrl('v2.12/me/accounts')
->send();
access_token保存在会话中,因此我需要将其保存到数据库中。
我已经access_token在social_account默认表中添加了一列,yii2-dektrium但我不知道如何获取和保存它,以及如何将其应用于请求。
读了一会儿。我认为保存它的方法是connect覆盖dektrium\user\controllers\SecurityController.
public function connect(ClientInterface $client)
{
/** @var Account $account */
$account = \Yii::createObject(Account::className());
$event = $this->getAuthEvent($account, $client);
$this->trigger(self::EVENT_BEFORE_CONNECT, $event);
$account->connectWithUser($client);
$this->trigger(self::EVENT_AFTER_CONNECT, $event);
$this->action->successUrl = Url::to(['/user/settings/networks']);
}
对于申请请求,applyAccessTokenToRequest覆盖yii\authclient\clients\Facebook
public function applyAccessTokenToRequest($request, $accessToken)
{
parent::applyAccessTokenToRequest($request, $accessToken);
$data = $request->getData();
if (($machineId = $accessToken->getParam('machine_id')) !== null) {
$data['machine_id'] = $machineId;
}
$data['appsecret_proof'] = hash_hmac('sha256', $accessToken->getToken(), $this->clientSecret);
$request->setData($data);
}
我无法完成它。而且我不确定这是否是正确的方法。我错过了什么?