Package allows you to implement Steam authentication in your Laravel project.
- Laravel 8+
- Guzzle HTTP 6.5+
composer require mentalrob/laravel-steam-auth
php artisan vendor:publish --provider="Ilzrv\LaravelSteamAuth\ServiceProvider"
Add your Steam API key to your .env
file. You can find it here.
if you want to use multiple API keys just list them separated by commas
STEAM_AUTH_API_KEYS=YourSteamApiKey1,YourSteamApiKey2
In routes/web.php
:
Route::get('login', 'Auth\SteamAuthController@login');
Create a controller SteamAuthController.php
:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\User;
use Illuminate\Support\Facades\Auth;
use Ilzrv\LaravelSteamAuth\SteamAuth;
use Ilzrv\LaravelSteamAuth\SteamData;
class SteamAuthController extends Controller
{
/**
* The SteamAuth instance.
*
* @var SteamAuth
*/
protected $steamAuth;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* SteamAuthController constructor.
*
* @param SteamAuth $steamAuth
*/
public function __construct(SteamAuth $steamAuth)
{
$this->steamAuth = $steamAuth;
}
/**
* Get user data and login
*
* @return \Illuminate\Http\RedirectResponse
*/
public function login()
{
if (!$this->steamAuth->validate()) {
return $this->steamAuth->redirect();
}
$data = $this->steamAuth->getUserData();
if (is_null($data)) {
return $this->steamAuth->redirect();
}
Auth::login(
$this->firstOrCreate($data),
true
);
return redirect($this->redirectTo);
}
/**
* Get the first user by SteamID or create new
*
* @param SteamData $data
* @return User|\Illuminate\Database\Eloquent\Model
*/
protected function firstOrCreate(SteamData $data)
{
return User::firstOrCreate([
'steam_id' => $data->getSteamId(),
], [
'name' => $data->getPersonaName(),
'avatar' => $data->getAvatarFull(),
'player_level' => $data->getPlayerLevel(),
// ...and other what you need
]);
}
}