2020-05-12 16:56:50 +02:00
|
|
|
# laravel-connect
|
2020-05-11 16:26:34 +02:00
|
|
|
|
|
|
|
The Bluesquare Connect package allows you to use its OAuth server and sync its resources.
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
2020-05-12 16:56:50 +02:00
|
|
|
Update your `composer.json`:
|
2020-05-11 16:26:34 +02:00
|
|
|
|
|
|
|
```
|
|
|
|
"require": {
|
2020-05-12 16:56:50 +02:00
|
|
|
"bluesquare/laravel-connect": "dev-master"
|
2020-05-11 16:26:34 +02:00
|
|
|
}
|
|
|
|
"repositories": [
|
2020-05-12 16:56:50 +02:00
|
|
|
{
|
|
|
|
"type": "vcs",
|
|
|
|
"url": "https://git.bluesquare.io/bluesquare/laravel-connect"
|
|
|
|
}
|
2020-05-11 16:26:34 +02:00
|
|
|
]
|
|
|
|
```
|
|
|
|
|
2020-05-12 16:56:50 +02:00
|
|
|
Install the package:
|
2020-05-11 16:26:34 +02:00
|
|
|
|
|
|
|
```bash
|
|
|
|
composer update bluesquare/laravel-connect
|
|
|
|
```
|
|
|
|
|
2020-05-12 16:56:50 +02:00
|
|
|
Finally, update your `.env` with your client's credentials:
|
2020-05-11 16:26:34 +02:00
|
|
|
|
|
|
|
```bash
|
2020-05-12 16:56:50 +02:00
|
|
|
BCONNECT_CLIENT_ID=your_client_id
|
|
|
|
BCONNECT_CLIENT_SECRET=your_client_secret
|
2020-05-13 13:41:09 +02:00
|
|
|
BCONNECT_REDIRECT=http://localhost:8000/connect/callback
|
2020-05-12 16:56:50 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
### Sign in with Bluesquare Connect
|
|
|
|
|
|
|
|
Follow there instructions to add Bluesquare Connect's authentication to your app.
|
|
|
|
|
|
|
|
Update your `routes/web.php`:
|
|
|
|
|
|
|
|
```
|
|
|
|
Connect::routes();
|
|
|
|
```
|
|
|
|
|
|
|
|
Add the "Sign in with Bluesquare Connect" button in your blade login page:
|
|
|
|
|
|
|
|
```blade
|
|
|
|
<x-connect-button/>
|
|
|
|
```
|
|
|
|
|
2020-05-12 17:00:46 +02:00
|
|
|
Make sure that the `password` column of users table is nullable.
|
2020-05-12 16:59:38 +02:00
|
|
|
|
2020-05-12 16:56:50 +02:00
|
|
|
#### Keep user tokens (optional)
|
|
|
|
|
|
|
|
First, make sure that your model implements `HasConnectTokens` trait.
|
|
|
|
|
|
|
|
Then, add the following columns to your table:
|
|
|
|
|
|
|
|
```
|
|
|
|
$table->text('connect_access_token')->nullable();
|
|
|
|
$table->text('connect_refresh_token')->nullable();
|
|
|
|
$table->dateTime('connect_expires_at')->nullable();
|
|
|
|
```
|
|
|
|
|
|
|
|
### Database syncing
|
|
|
|
|
|
|
|
Follow these instructions to sync your database with Bluesquare Connect.
|
|
|
|
|
|
|
|
In your `AppServiceProvider`, specify in the `boot()` function which entities you want to sync:
|
|
|
|
|
2020-05-11 16:26:34 +02:00
|
|
|
```
|
2020-05-12 16:56:50 +02:00
|
|
|
$connect->setSynchronized([
|
|
|
|
Role::class,
|
|
|
|
Company::class,
|
|
|
|
Team::class,
|
|
|
|
User::class,
|
|
|
|
UserTeam::class
|
|
|
|
]);
|
|
|
|
```
|
|
|
|
|
2020-05-13 12:38:26 +02:00
|
|
|
Your models must use `HasConnectSync` trait. This trait allows you to customize the syncing behavior.
|
|
|
|
|
|
|
|
You also need to add this column to your synced tables:
|
|
|
|
|
|
|
|
```
|
|
|
|
$table->unsignedBigInteger('connect_resource_id')->unique();
|
|
|
|
```
|
|
|
|
|
|
|
|
_You can customize this column name and the syncing behavior in your model. Take a look at `HasConnectSync`._
|
2020-05-11 16:26:34 +02:00
|
|
|
|
2020-05-12 16:56:50 +02:00
|
|
|
Finally, use this command to sync everything:
|
2020-05-11 16:26:34 +02:00
|
|
|
|
|
|
|
```bash
|
2020-05-12 16:56:50 +02:00
|
|
|
php artisan connect:sync
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Live updates (optional)
|
|
|
|
|
|
|
|
First, configure a webhook on Bluesquare Connect :
|
|
|
|
|
|
|
|
```
|
|
|
|
https://your-app.com/api/connect/webhook
|
|
|
|
```
|
|
|
|
|
|
|
|
Then, update your `routes/api.php`:
|
|
|
|
|
|
|
|
```
|
|
|
|
Connect::apiRoutes();
|
|
|
|
```
|
|
|
|
|
|
|
|
## Advanced usage
|
|
|
|
|
|
|
|
### OAuth (sign in)
|
|
|
|
|
|
|
|
#### Authorization
|
|
|
|
|
|
|
|
Redirect to Bluesquare Connect authorization page:
|
|
|
|
|
|
|
|
```
|
|
|
|
public function authorize(Connect $connect)
|
|
|
|
{
|
|
|
|
return $connect->redirect($optional_custom_state);
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Authorization callback
|
|
|
|
|
|
|
|
Auto: check state, login and redirect
|
|
|
|
|
|
|
|
```
|
|
|
|
public function callback(Request $request, Connect $connect)
|
|
|
|
{
|
|
|
|
return $connect->loginFromCallback($request, $optional_redirect_to);
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
Manual: check state
|
|
|
|
|
|
|
|
```
|
|
|
|
public function callback(Request $request, Connect $connect)
|
|
|
|
{
|
|
|
|
$valid = $connect->checkState($request);
|
|
|
|
// ...
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Tokens management
|
|
|
|
|
|
|
|
```
|
|
|
|
// Retrieve tokens from an authorization code
|
|
|
|
$connect_data = $connect->getAccessTokenFromAuthorizationCode($code);
|
|
|
|
|
|
|
|
// Retrieve tokens from a refresh token
|
|
|
|
$connect_data = $connect->getAccessTokenFromRefreshToken($connect_data['refresh_token']);
|
|
|
|
|
|
|
|
// With HasConnectTokens trait: get your local user tokens
|
|
|
|
$connect->getUserAccessToken($user);
|
|
|
|
```
|
|
|
|
|
|
|
|
#### User data
|
|
|
|
|
|
|
|
```
|
|
|
|
// Retrieve user data from an access token
|
|
|
|
$user_data = $connect->getUserData($connect_data['access_token']);
|
|
|
|
|
|
|
|
// Example: find the corresponding user in your database
|
|
|
|
$user = User::where('email', $user_data['email'])->first();
|
|
|
|
```
|
|
|
|
|
|
|
|
### OAuth (client)
|
|
|
|
|
|
|
|
#### Token management
|
|
|
|
|
|
|
|
```
|
|
|
|
// Get an access token
|
|
|
|
$connect->getAccessToken();
|
|
|
|
|
|
|
|
// Delete the current access token from cache
|
|
|
|
$connect->deleteAccessToken();
|
|
|
|
```
|
|
|
|
|
|
|
|
#### API resources
|
|
|
|
|
|
|
|
```
|
|
|
|
// Fetch all users
|
|
|
|
$connect->getAll('User');
|
|
|
|
|
|
|
|
// Fetch an user
|
|
|
|
$connect->get('User', 1);
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Syncing
|
|
|
|
|
|
|
|
```
|
|
|
|
// Sync everything
|
|
|
|
$optional_resource_types = ['User', ...];
|
|
|
|
$connect->syncAll($optional_resource_types);
|
|
|
|
|
|
|
|
// Sync a specific resource
|
|
|
|
$connect->sync('User', 1);
|
|
|
|
```
|
|
|
|
|
|
|
|
### Webhook
|
|
|
|
|
|
|
|
```
|
|
|
|
// Handle a webhook request
|
|
|
|
$connect->handleWebhook($request);
|
|
|
|
```
|
|
|
|
|
|
|
|
### Configuration
|
|
|
|
|
|
|
|
Publish our config file (`config/bconnect.php`) to customize the package configuration:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
php artisan vendor:publish
|
2020-05-11 16:26:34 +02:00
|
|
|
```
|