laravel-connect/README.md

217 lines
4.1 KiB
Markdown
Raw Permalink Normal View History

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
```