Skip to content

Commit c0c2382

Browse files
authored
[1.x] Allow scopes to be defined in config and merge with defaults (#9)
1 parent 8bd7924 commit c0c2382

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

src/FacebookServiceProvider.php

+1
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ protected function registerFacebook(): void
121121
'app_id' => $app['config']->get('facebook.app_id'),
122122
'app_secret' => $app['config']->get('facebook.app_secret'),
123123
'redirect_uri' => $app['config']->get('facebook.redirect_uri'),
124+
'scopes' => $app['config']->get('facebook.scopes', []),
124125
'default_graph_version' => $app['config']->get('facebook.graph_version'),
125126
'enable_beta_mode' => $app['config']->get('facebook.beta_mode'),
126127
'persistent_data_handler' => $app[PersistentDataInterface::class],

src/Traits/HandlesAuthentication.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ public function getRedirect(?string $redirectUrl = null, array $scopes = []): st
5353
throw new \InvalidArgumentException('A valid redirect URL is required');
5454
}
5555

56-
$scopes = ! empty($scopes) ? $scopes : ($this->config['scopes'] ?? ['email', 'public_profile']);
56+
$scopes = array_merge($this->config['scopes'] ?? [], [
57+
'email', 'public_profile',
58+
]);
5759

5860
return $this->getLoginHelper()->getLoginUrl($url, $scopes);
5961
}

tests/FacebookTest.php

+15
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,21 @@
6767
$facebook->getRedirect();
6868
});
6969

70+
it('builds default scopes', function () {
71+
$redirect = $this->getFacebookMock()->getRedirect();
72+
$this->assertStringContainsStringIgnoringCase('scope='.urlencode('email,public_profile'), $redirect);
73+
});
74+
75+
it('builds replaces duplicate scopes with defaults', function () {
76+
$redirect = $this->getFacebookMock(['scopes' => ['email', 'public_profile']])->getRedirect();
77+
$this->assertStringContainsStringIgnoringCase('scope='.urlencode('email,public_profile'), $redirect);
78+
});
79+
80+
it('builds appends default scopes to requested', function () {
81+
$redirect = $this->getFacebookMock(['scopes' => ['publish_actions']])->getRedirect();
82+
$this->assertStringContainsStringIgnoringCase('scope='.urlencode('publish_actions,email,public_profile'), $redirect);
83+
});
84+
7085
it('returns a valid redirect login helper instance', function () {
7186
$helper = $this->getFacebookMock()->getLoginHelper();
7287
$dataHandler = $helper->getPersistentDataHandler();

0 commit comments

Comments
 (0)