Alex_Wells
@Alex_Wells
PHP/TS/Kotlin developer

Как работать с Laravel Steam Auth?

Здравствуйте. Я пытаюсь сделать авторизацию пользователей через стим. Регистрации быть не должно, а авторизация исключительно через стим. Сейчас я сделал все как в example-гайде, ну примерно. Только вот я, хоть убейте, не понимаю, каким образом оно должно работать. Создал get route на SteamController@getLogin, если зайти на этот маршрут то вылезет авторизация на сайте стима. Когда все подтверждаешь возвращает обратно на сайт с таким содержимым адресной строки:
?openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.mode=id_res&openid.op_endpoint=https%3A%2F%2Fsteamcommunity.com%2Fopenid%2Flogin&openid.claimed_id=http%3A%2F%2Fsteamcommunity.com%2Fopenid%2Fid%2F76561198126709110&openid.identity=http%3A%2F%2Fsteamcommunity.com%2Fopenid%2Fid%2F

Но юзер досих пор guest. Что делать? Вот сам SteamController:
<?php
	
namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;
use Invisnik\LaravelSteamAuth\SteamAuth;

class SteamController extends Controller {

    /**
     * @var SteamAuth
     */
    private $steam;

    public function __construct(SteamAuth $steam)
    {
        $this->steam = $steam;
    }

    public function getLogin()
    {
        if($this->steam->validate()){
            $info = $this->steam->getUserInfo();
			echo $info->getNick();
            if(!is_null($info)) {
				try {
					$user = User::where('steamid', $info->getSteamID())->first();
					if($user->name != $info->getNick() || $user->profileURL != $info->getProfileURL()) {
						$user->name = $info->getNick();
						$user->profileURL = $info->getProfileURL();
						$user->save();
					}
					
					Auth::login($user);
					return $user;
					
				} catch(Exception $ex) {
					$user = User::create([
						'name' => $info->getNick(),
						'steamid' => $info->getSteamID(),
						'profileURL' => $info->getProfileURL(),
					]);
					
					Auth::login($user);
					return $user;
				}
            }
        } else {
            return  $this->steam->redirect(); //redirect to steam login page
        }
    }
}
  • Вопрос задан
  • 3268 просмотров
Решения вопроса 1
Alex_Wells
@Alex_Wells Автор вопроса
PHP/TS/Kotlin developer
И так, ребятки, я разобрался. Щас будем исправлять быдло код, но зато работает! Оказалось, что после авторизации стим должен попасть на тот-же контроллер и на тот-же метод, а тогда метод validate() выдаст true, и все заробит!
Вот код:

<?php
	
namespace App\Http\Controllers;

use Illuminate\Auth\GenericUser;
use App\User;
use Debugbar;
use Auth;
use Redirect;
use App\Http\Controllers\Controller;
use Invisnik\LaravelSteamAuth\SteamAuth;

class SteamController extends Controller {

    /**
     * @var SteamAuth
     */
    private $steam;

    public function __construct(SteamAuth $steam)
    {
        $this->steam = $steam;
    }

    public function getLogin()
    {
        if($this->steam->validate()) {
			Debugbar::warning('OK');
            $info = $this->steam->getUserInfo();
            if(!is_null($info)) {
				try {
					$user = User::where('steamid', $info->getSteamID())->first();
					if(is_null($user)) {
						$user = User::create([
							'name' => $info->getNick(),
							'steamid' => $info->getSteamID(),
							'profileURL' => $info->getProfileURL(),
						]);
					}
					if($user->name != $info->getNick() || $user->profileURL != $info->getProfileURL()) {
						$user->name = $info->getNick();
						$user->profileURL = $info->getProfileURL();
						$user->save();
					}
					
					Auth::login($user);
					return Redirect::to('/');
					
				} catch(Illuminate\Database\Eloquent\ModelNotFoundException $ex) {
				}
            }
        } else {
            return  $this->steam->redirect(); //redirect to steam login page
        }
    }
	
	public function getLogout()
	{
		Auth::logout();
		return Redirect::to('/');
	}
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы