2016-01-11 5 views
4

Хотелось бы узнать, можно ли расширить встроенную аутентификацию для использования внешнего API для аутентификации пользователя? Я новичок в Laravel, поэтому я буду благодарен за вашу помощь. Я создаю пользовательское приложение в Laravel 5.2 для своего клиента, но я не имею прямого доступа к их серверу базы данных, и я могу только называть их API, чтобы получить информацию о пользователях.Laravel 5 аутентифицирует пользователей через внешний API

Спасибо.

+0

В прошлом я создал собственный драйвер аутентификации и пользовательскую модель, которая хранит пользователя в сеансе, а не связывается с базой данных. Это означает, что пользователи не могут взаимодействовать друг с другом, и как только сеанс умирает, этот пользователь «не существует», но он достаточно хорошо работал в ситуациях, когда приложение не нуждалось в хранении самой информации о состоянии. – samlev

+0

Имеет ли внешний API сам механизм аутентификации (a la OAuth)? –

+0

У меня все еще нет полных документов для их API, но OAuth недоступен наверняка. Я считаю, что мне нужно будет аутентифицировать пользователя по звонкам JSON. @samlev У вас есть примеры кода, которые могли бы помочь найти решение? – Kasta

ответ

1

Если я правильно понял, что вы хотите регистрировать пользователей от 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, это очень поучительно и ясно, я мог бы управлять им благодаря ему!

Смежные вопросы