Если я правильно понял, что вы хотите регистрировать пользователей от API, таких как facebook, twitter или github, например? Если это так, вам нужно использовать пакет Laravel с именем Socialite, вот ссылка на скачивание и использовать его: https://github.com/laravel/socialite
работать на вашей команде это:
composer require laravel/socialite
Далее вам нужно сказать Laravel вы хотите использовать этот пакет, так что вам нужно, чтобы добавить это в конфиге/app.php:
'providers' => [
// Other service providers...
Laravel\Socialite\SocialiteServiceProvider::class,
],
и это псевдонимы:
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
В принципе, вам нужно будет создать приложение на сайте разработчиков, я возьму facebook для этого примера. Вам нужно зайти на этот сайт: https://developers.facebook.com/, создать учетную запись, и вы получите URL-адрес своего приложения и Секретный ключ. Вы будете использовать его в файлах .env и config/services.
В файле конфигурации/услуг добавить это после того, как полоса:
'facebook' => [
'client_id' => env('FACEBOOK_ID'),
'client_secret' => env('FACEBOOK_SECRET'),
'redirect' => env('FACEBOOK_URL'),
],
И в файле .env:
FACEBOOK_ID=*your facebook id*
FACEBOOK_SECRET=*your facebook secret*
FACEBOOK_URL=http://yourwebsite.com/callback
Далее вам нужен контроллер для управления процессом аутентификации, создать что-то вроде SocialAuthController и положите это на:
public function redirect()
{
return Socialite::driver('facebook')->redirect();
}
public function callback() {
$user = $this->findOrCreateFbUser(Socialite::driver('facebook')->user());
session([
'user' => $user
]);
return redirect()->route('/');
}
public function logout() {
session()->forget('user');
return redirect()->route('home');
}
protected function findOrCreateFbUser($fbUser) {
// the data you want to get from facebook
$fbData = [
'facebook_id' => $fbUser->id,
'avatar' => $fbUser->avatar,
'username' => $fbUser->name,
'email' => $fbUser->email,
];
$user = \App\User::where('facebook_id', $fbData['facebook_id'])->first();
if(!$user) $user = \App\User::create($fbData);
$user->update([
'avatar' => $fbUser->avatar,
'username' => $fbUser->name,
'email' => $fbUser->email
]);
return $user;
}
Конечно, вам нужно добавить fa cebook_id в вашей пользовательской базе данных и модели. В User.php:
protected $fillable = [
'facebook_id',
'username',
'email',
'avatar'
];
Я знаю, что это решение не очень динамично, как это только один API, я все еще довольно новое в Laravel тоже, и это мой первый ответ на stackoverflowquestion, но это сделало трюк для меня :) Если я что-то забыл, не стесняйтесь сказать мне, чтобы я мог обновить этот ответ.
Я также предлагаю вам следовать учебнику Джеффри Уэй по социальному ауту на веб-сайте Laracasts, это очень поучительно и ясно, я мог бы управлять им благодаря ему!
В прошлом я создал собственный драйвер аутентификации и пользовательскую модель, которая хранит пользователя в сеансе, а не связывается с базой данных. Это означает, что пользователи не могут взаимодействовать друг с другом, и как только сеанс умирает, этот пользователь «не существует», но он достаточно хорошо работал в ситуациях, когда приложение не нуждалось в хранении самой информации о состоянии. – samlev
Имеет ли внешний API сам механизм аутентификации (a la OAuth)? –
У меня все еще нет полных документов для их API, но OAuth недоступен наверняка. Я считаю, что мне нужно будет аутентифицировать пользователя по звонкам JSON. @samlev У вас есть примеры кода, которые могли бы помочь найти решение? – Kasta