From 3f04f14a2d6914d100832169aeaa368afcc46c0e Mon Sep 17 00:00:00 2001 From: "Christopher C. Wells" Date: Mon, 8 Nov 2021 20:49:15 -0800 Subject: [PATCH] Add API key to profile output --- .phpstorm.meta.php | 11 +++++++ app/Models/User.php | 17 +++++++--- ...08_203226_add_api_token_to_users_table.php | 32 +++++++++++++++++++ resources/views/profiles/show.blade.php | 7 ++-- routes/api.php | 7 +--- 5 files changed, 61 insertions(+), 13 deletions(-) create mode 100644 database/migrations/2021_11_08_203226_add_api_token_to_users_table.php diff --git a/.phpstorm.meta.php b/.phpstorm.meta.php index 3699592..e022f39 100644 --- a/.phpstorm.meta.php +++ b/.phpstorm.meta.php @@ -213,6 +213,7 @@ namespace PHPSTORM_META { 'queue.worker' => \Illuminate\Queue\Worker::class, 'redirect' => \Illuminate\Routing\Redirector::class, 'redis' => \Illuminate\Redis\RedisManager::class, + 'redis.connection' => \Illuminate\Redis\Connections\PhpRedisConnection::class, 'router' => \Illuminate\Routing\Router::class, 'session' => \Illuminate\Session\SessionManager::class, 'session.store' => \Illuminate\Session\Store::class, @@ -428,6 +429,7 @@ namespace PHPSTORM_META { 'queue.worker' => \Illuminate\Queue\Worker::class, 'redirect' => \Illuminate\Routing\Redirector::class, 'redis' => \Illuminate\Redis\RedisManager::class, + 'redis.connection' => \Illuminate\Redis\Connections\PhpRedisConnection::class, 'router' => \Illuminate\Routing\Router::class, 'session' => \Illuminate\Session\SessionManager::class, 'session.store' => \Illuminate\Session\Store::class, @@ -643,6 +645,7 @@ namespace PHPSTORM_META { 'queue.worker' => \Illuminate\Queue\Worker::class, 'redirect' => \Illuminate\Routing\Redirector::class, 'redis' => \Illuminate\Redis\RedisManager::class, + 'redis.connection' => \Illuminate\Redis\Connections\PhpRedisConnection::class, 'router' => \Illuminate\Routing\Router::class, 'session' => \Illuminate\Session\SessionManager::class, 'session.store' => \Illuminate\Session\Store::class, @@ -858,6 +861,7 @@ namespace PHPSTORM_META { 'queue.worker' => \Illuminate\Queue\Worker::class, 'redirect' => \Illuminate\Routing\Redirector::class, 'redis' => \Illuminate\Redis\RedisManager::class, + 'redis.connection' => \Illuminate\Redis\Connections\PhpRedisConnection::class, 'router' => \Illuminate\Routing\Router::class, 'session' => \Illuminate\Session\SessionManager::class, 'session.store' => \Illuminate\Session\Store::class, @@ -1073,6 +1077,7 @@ namespace PHPSTORM_META { 'queue.worker' => \Illuminate\Queue\Worker::class, 'redirect' => \Illuminate\Routing\Redirector::class, 'redis' => \Illuminate\Redis\RedisManager::class, + 'redis.connection' => \Illuminate\Redis\Connections\PhpRedisConnection::class, 'router' => \Illuminate\Routing\Router::class, 'session' => \Illuminate\Session\SessionManager::class, 'session.store' => \Illuminate\Session\Store::class, @@ -1288,6 +1293,7 @@ namespace PHPSTORM_META { 'queue.worker' => \Illuminate\Queue\Worker::class, 'redirect' => \Illuminate\Routing\Redirector::class, 'redis' => \Illuminate\Redis\RedisManager::class, + 'redis.connection' => \Illuminate\Redis\Connections\PhpRedisConnection::class, 'router' => \Illuminate\Routing\Router::class, 'session' => \Illuminate\Session\SessionManager::class, 'session.store' => \Illuminate\Session\Store::class, @@ -1503,6 +1509,7 @@ namespace PHPSTORM_META { 'queue.worker' => \Illuminate\Queue\Worker::class, 'redirect' => \Illuminate\Routing\Redirector::class, 'redis' => \Illuminate\Redis\RedisManager::class, + 'redis.connection' => \Illuminate\Redis\Connections\PhpRedisConnection::class, 'router' => \Illuminate\Routing\Router::class, 'session' => \Illuminate\Session\SessionManager::class, 'session.store' => \Illuminate\Session\Store::class, @@ -1718,6 +1725,7 @@ namespace PHPSTORM_META { 'queue.worker' => \Illuminate\Queue\Worker::class, 'redirect' => \Illuminate\Routing\Redirector::class, 'redis' => \Illuminate\Redis\RedisManager::class, + 'redis.connection' => \Illuminate\Redis\Connections\PhpRedisConnection::class, 'router' => \Illuminate\Routing\Router::class, 'session' => \Illuminate\Session\SessionManager::class, 'session.store' => \Illuminate\Session\Store::class, @@ -1933,6 +1941,7 @@ namespace PHPSTORM_META { 'queue.worker' => \Illuminate\Queue\Worker::class, 'redirect' => \Illuminate\Routing\Redirector::class, 'redis' => \Illuminate\Redis\RedisManager::class, + 'redis.connection' => \Illuminate\Redis\Connections\PhpRedisConnection::class, 'router' => \Illuminate\Routing\Router::class, 'session' => \Illuminate\Session\SessionManager::class, 'session.store' => \Illuminate\Session\Store::class, @@ -2148,6 +2157,7 @@ namespace PHPSTORM_META { 'queue.worker' => \Illuminate\Queue\Worker::class, 'redirect' => \Illuminate\Routing\Redirector::class, 'redis' => \Illuminate\Redis\RedisManager::class, + 'redis.connection' => \Illuminate\Redis\Connections\PhpRedisConnection::class, 'router' => \Illuminate\Routing\Router::class, 'session' => \Illuminate\Session\SessionManager::class, 'session.store' => \Illuminate\Session\Store::class, @@ -2363,6 +2373,7 @@ namespace PHPSTORM_META { 'queue.worker' => \Illuminate\Queue\Worker::class, 'redirect' => \Illuminate\Routing\Redirector::class, 'redis' => \Illuminate\Redis\RedisManager::class, + 'redis.connection' => \Illuminate\Redis\Connections\PhpRedisConnection::class, 'router' => \Illuminate\Routing\Router::class, 'session' => \Illuminate\Session\SessionManager::class, 'session.store' => \Illuminate\Session\Store::class, diff --git a/app/Models/User.php b/app/Models/User.php index f7a6f1e..8956c66 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -10,7 +10,7 @@ use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Support\Carbon; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Str; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\MediaCollections\Models\Media; @@ -56,6 +56,8 @@ use Spatie\MediaLibrary\MediaCollections\Models\Media; * @property \Illuminate\Support\Collection|null $meals * @method static \Illuminate\Database\Eloquent\Builder|User whereMeals($value) * @property-read Collection $meals_enabled + * @property string|null $api_token + * @method static \Illuminate\Database\Eloquent\Builder|User whereApiToken($value) */ final class User extends Authenticatable implements HasMedia { @@ -71,6 +73,9 @@ final class User extends Authenticatable implements HasMedia static::creating(function (User $user) { // Set default meals configuration. $user->meals = User::getDefaultMeals(); + + // Set default API token. + $user->api_token = Str::random(32); }); } @@ -78,17 +83,19 @@ final class User extends Authenticatable implements HasMedia * @inheritdoc */ protected $fillable = [ - 'username', - 'password', - 'name', - 'meals', 'admin', + 'api_token', + 'meals', + 'name', + 'password', + 'username', ]; /** * @inheritdoc */ protected $hidden = [ + 'api_token', 'password', 'remember_token', ]; diff --git a/database/migrations/2021_11_08_203226_add_api_token_to_users_table.php b/database/migrations/2021_11_08_203226_add_api_token_to_users_table.php new file mode 100644 index 0000000..d03b133 --- /dev/null +++ b/database/migrations/2021_11_08_203226_add_api_token_to_users_table.php @@ -0,0 +1,32 @@ +char('api_token', 32)->unique()->nullable()->after('password'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('api_token'); + }); + } +} diff --git a/resources/views/profiles/show.blade.php b/resources/views/profiles/show.blade.php index 4af01ee..5605a1d 100644 --- a/resources/views/profiles/show.blade.php +++ b/resources/views/profiles/show.blade.php @@ -18,7 +18,10 @@ @endif -
- {{ $user->name }} +
+

{{ $user->name }}

+ @if($user->id === Auth::user()->id) +

API key: {{ $user->api_token }}

+ @endif
diff --git a/routes/api.php b/routes/api.php index 4c60e3e..c71a6e6 100644 --- a/routes/api.php +++ b/routes/api.php @@ -4,14 +4,9 @@ |-------------------------------------------------------------------------- | API Routes |-------------------------------------------------------------------------- -| -| See: https://laravel-json-api.readthedocs.io/en/latest/ -| -| TODO: Get auth middleware working... -| */ -JsonApi::register('v1')->middleware('auth')->routes(function ($api) { +JsonApi::register('v1')->middleware('auth:api,web')->routes(function ($api) { $api->resource('foods')->relationships(function ($relations) { $relations->hasMany('tags')->readOnly(); })->readOnly();