Как переопределять REDIRECT_URI для Laravel Socialite в зависимости от типа аутентифицирующегося пользователя?
Столкнулся с проблемой при аутентификации через соцсети для нескольких сущностей. Имеются две сущности: Student и Teacher. Для начала опишу рабочий вариант для одной сущности. Мои роуты аутентификации:
//Socialite auth routes...
Route::middleware('guest')->group(function () {
Route::get('auth/{provider}', 'SocialController@index')->name('auth.provider');
Route::get('auth/{provider}/callback', 'SocialController@callback');
});
Мой контроллер:
class SocialController extends Controller
{
public function index($provider)
{
return Socialite::driver($provider)->redirect();
}
public function callback(SocialService $socialService, $provider)
{
$user = Socialite::driver($provider)->user();
if ($u = $socialService->saveSocialData($user)) {
Auth::guard('student')->login($u);
return redirect()->route('profile.index');
}
return back();
}
}
Мой конфиг :
VKONTAKTE_CLIENT_ID=7864077
VKONTAKTE_CLIENT_SECRET=Z2i92xXe47mGJY3D5DQE
VKONTAKTE_REDIRECT_URI=http://127.0.0.1:8000/auth/vkontakte/callback
Так все прекрасно работает, но для сущности Student. Я хочу передавать в параметр маршрута еще и название сущности (для выбора соответствующей модели, гварда и редиректа в контроллере), вот так в переменную $client:
//Socialite auth routes...
Route::middleware('guest')->group(function () {
Route::get('auth/{client}/{provider}', 'SocialController@index')->name('auth.provider');
Route::get('auth/{client}/{provider}/callback', 'SocialController@callback');
});
Но, я сталкиваюсь с проблемой конфигурации маршрута REDIRECT_URI:
VKONTAKTE_REDIRECT_URI=http://127.0.0.1:8000/auth/student/vkontakte/callback
VKONTAKTE_REDIRECT_URI=http://127.0.0.1:8000/auth/teacher/vkontakte/callback
Если я пропишу два маршрута в конфиге, то переменная просто переопределится и вернет всегда последний маршрут для любой сущности. Как можно динамически изменять REDIRECT_URI в зависимости от передаваемых параметров?
Ответы (1 шт):
Можно переопределять конфиг из кода.
Т.е в Вашем index проверяйте, кому нужно войти, и подставляйте в конфиг редирект (если путь указан в приложении ВК, конечно).
$redirectUrl = "http://yourdomain.com/api/redirect";
$config = new \SocialiteProviders\Manager\Config(env('VKONTAKTE_CLIENT_ID'), env('VKONTAKTE_CLIENT_SECRET'), $redirectUrl);
return Socialite::driver($provider)->setConfig($config)->redirect();