diff --git a/framework/core/src/Flarum/Api/Actions/Auth/Login.php b/framework/core/src/Flarum/Api/Actions/Auth/Login.php index e68c0ab0e..d61030bdf 100644 --- a/framework/core/src/Flarum/Api/Actions/Auth/Login.php +++ b/framework/core/src/Flarum/Api/Actions/Auth/Login.php @@ -21,14 +21,16 @@ class Login extends Base $field = filter_var($identification, FILTER_VALIDATE_EMAIL) ? 'email' : 'username'; $credentials = [$field => $identification, 'password' => $password]; - if (! Auth::attempt($credentials, true)) { + if (! Auth::validate($credentials)) { return $this->respondWithError('invalidLogin', 401); } - $user = Auth::user(); + $user = Auth::getLastAttempted(); + $user->token = str_random(60); + $user->save(); return Response::json([ - 'token' => $user->getRememberToken(), + 'token' => $user->token, 'userId' => $user->id ]); } diff --git a/framework/core/src/Flarum/Api/Serializers/UserSerializer.php b/framework/core/src/Flarum/Api/Serializers/UserSerializer.php index cacf518c4..f98601e0a 100644 --- a/framework/core/src/Flarum/Api/Serializers/UserSerializer.php +++ b/framework/core/src/Flarum/Api/Serializers/UserSerializer.php @@ -27,8 +27,8 @@ class UserSerializer extends UserBasicSerializer $attributes = parent::attributes($user); $attributes += [ - 'joinTime' => $user->join_time ? $user->join_time->toRFC3339String() : '', - 'lastSeenTime' => $user->last_seen_time ? $user->last_seen_time->toRFC3339String() : '', + 'joinTime' => $user->join_time ? $user->join_time->toRFC3339String() : null, + 'lastSeenTime' => $user->last_seen_time ? $user->last_seen_time->toRFC3339String() : null, 'discussionsCount' => (int) $user->discussions_count, 'postsCount' => (int) $user->posts_count, 'canEdit' => $user->permission('edit'), diff --git a/framework/core/src/Flarum/Core/Users/User.php b/framework/core/src/Flarum/Core/Users/User.php index 37759a396..322675f3f 100755 --- a/framework/core/src/Flarum/Core/Users/User.php +++ b/framework/core/src/Flarum/Core/Users/User.php @@ -210,4 +210,9 @@ class User extends Entity implements UserInterface, RemindableInterface { return $this->hasMany('Flarum\Core\Activity\Activity'); } + + public function setRememberToken($value) + { + return; + } } diff --git a/framework/core/src/migrations/2014_01_14_231404_create_users_table.php b/framework/core/src/migrations/2014_01_14_231404_create_users_table.php index 6a3bda13f..6ebfb562e 100644 --- a/framework/core/src/migrations/2014_01_14_231404_create_users_table.php +++ b/framework/core/src/migrations/2014_01_14_231404_create_users_table.php @@ -18,7 +18,7 @@ class CreateUsersTable extends Migration { $table->string('username'); $table->string('email'); $table->string('password'); - $table->rememberToken(); + $table->string('token'); $table->dateTime('join_time'); $table->string('time_zone'); $table->dateTime('last_seen_time')->nullable(); diff --git a/framework/core/src/routes.api.php b/framework/core/src/routes.api.php index 56983da8d..208c5b067 100644 --- a/framework/core/src/routes.api.php +++ b/framework/core/src/routes.api.php @@ -15,7 +15,9 @@ Route::filter('attemptLogin', function($route, $request) { $prefix = 'Token '; if (starts_with($request->headers->get('authorization'), $prefix)) { $token = substr($request->headers->get('authorization'), strlen($prefix)); - Auth::once(['remember_token' => $token]); + if ($user = Flarum\Core\Users\User::where('token', $token)->first()) { + Auth::setUser($user); + } } }); diff --git a/framework/core/tests/api/AuthCest.php b/framework/core/tests/api/AuthCest.php index a99b7b748..cdb994620 100644 --- a/framework/core/tests/api/AuthCest.php +++ b/framework/core/tests/api/AuthCest.php @@ -24,7 +24,7 @@ class AuthCest $userId = $I->grabDataFromJsonResponse('userId'); $I->assertNotEmpty($token); - $loggedIn = User::where('remember_token', $token)->where('id', $userId)->first(); + $loggedIn = User::where('token', $token)->where('id', $userId)->first(); $I->assertEquals($user->id, $loggedIn->id); } @@ -45,7 +45,7 @@ class AuthCest $userId = $I->grabDataFromJsonResponse('userId'); $I->assertNotEmpty($token); - $loggedIn = User::where('remember_token', $token)->where('id', $userId)->first(); + $loggedIn = User::where('token', $token)->where('id', $userId)->first(); $I->assertEquals($user->id, $loggedIn->id); }