Я хотел бы знать, можно ли расширить встроенную аутентификацию для использования внешнего API для аутентификации пользователя? Я новичок в Laravel, поэтому я буду благодарен за вашу помощь. Я делаю заказное приложение в Laravel 5.2 для своего клиента, но я не имею прямого доступа к их серверу базы данных, и я могу только позвонить их API, чтобы получить информацию о пользователях.
Благодарю.
Если я правильно понял, вы хотите зарегистрировать пользователей из таких API, как facebook, twitter или github, например? Если это так, вам нужно использовать пакет laravel с именем Socialite, вот ссылка для его загрузки и использования: https://github.com/laravel/socialite
выполните следующую команду:
composer require laravel/socialite
Затем вам нужно сообщить laravel, что вы хотите использовать этот пакет, поэтому вам нужно добавить его в config / 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.
В вашем файле 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
Затем вам понадобится контроллер для обработки процесса auth, создайте что-то вроде 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; }
Конечно, вам нужно добавить поле facebook_id в свою пользовательскую базу данных и модель. В User.php:
protected $fillable = [ 'facebook_id', 'username', 'email', 'avatar' ];
Я знаю, что это решение не очень динамично, поскольку оно относится только к одному апи, я все еще довольно новичок в Laravel, и это мой первый ответ на stackoverflowquestion, но это сделало трюк для меня 🙂 Если я что-то забыл, Не стесняйтесь сказать мне, чтобы я мог обновить этот ответ.
Я также предлагаю вам следовать учебнику Джеффри Уэй по социальному ауту на веб-сайте Laracasts, это очень поучительно и понятно, я мог бы управлять им благодаря ему!