1
0
mirror of https://github.com/flarum/core.git synced 2025-07-17 23:01:17 +02:00

Use our own token instead of Laravel's

Laravel’s remember_token is tied to the session/cookies, which we don’t
need as the API is stateless. It makes much more sense to use our own
token mechanism.
This commit is contained in:
Toby Zerner
2015-01-30 12:08:02 +10:30
parent 61b0dfaa81
commit effa414a01
6 changed files with 18 additions and 9 deletions

View File

@@ -21,14 +21,16 @@ class Login extends Base
$field = filter_var($identification, FILTER_VALIDATE_EMAIL) ? 'email' : 'username'; $field = filter_var($identification, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
$credentials = [$field => $identification, 'password' => $password]; $credentials = [$field => $identification, 'password' => $password];
if (! Auth::attempt($credentials, true)) { if (! Auth::validate($credentials)) {
return $this->respondWithError('invalidLogin', 401); return $this->respondWithError('invalidLogin', 401);
} }
$user = Auth::user(); $user = Auth::getLastAttempted();
$user->token = str_random(60);
$user->save();
return Response::json([ return Response::json([
'token' => $user->getRememberToken(), 'token' => $user->token,
'userId' => $user->id 'userId' => $user->id
]); ]);
} }

View File

@@ -27,8 +27,8 @@ class UserSerializer extends UserBasicSerializer
$attributes = parent::attributes($user); $attributes = parent::attributes($user);
$attributes += [ $attributes += [
'joinTime' => $user->join_time ? $user->join_time->toRFC3339String() : '', 'joinTime' => $user->join_time ? $user->join_time->toRFC3339String() : null,
'lastSeenTime' => $user->last_seen_time ? $user->last_seen_time->toRFC3339String() : '', 'lastSeenTime' => $user->last_seen_time ? $user->last_seen_time->toRFC3339String() : null,
'discussionsCount' => (int) $user->discussions_count, 'discussionsCount' => (int) $user->discussions_count,
'postsCount' => (int) $user->posts_count, 'postsCount' => (int) $user->posts_count,
'canEdit' => $user->permission('edit'), 'canEdit' => $user->permission('edit'),

View File

@@ -210,4 +210,9 @@ class User extends Entity implements UserInterface, RemindableInterface
{ {
return $this->hasMany('Flarum\Core\Activity\Activity'); return $this->hasMany('Flarum\Core\Activity\Activity');
} }
public function setRememberToken($value)
{
return;
}
} }

View File

@@ -18,7 +18,7 @@ class CreateUsersTable extends Migration {
$table->string('username'); $table->string('username');
$table->string('email'); $table->string('email');
$table->string('password'); $table->string('password');
$table->rememberToken(); $table->string('token');
$table->dateTime('join_time'); $table->dateTime('join_time');
$table->string('time_zone'); $table->string('time_zone');
$table->dateTime('last_seen_time')->nullable(); $table->dateTime('last_seen_time')->nullable();

View File

@@ -15,7 +15,9 @@ Route::filter('attemptLogin', function($route, $request) {
$prefix = 'Token '; $prefix = 'Token ';
if (starts_with($request->headers->get('authorization'), $prefix)) { if (starts_with($request->headers->get('authorization'), $prefix)) {
$token = substr($request->headers->get('authorization'), strlen($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);
}
} }
}); });

View File

@@ -24,7 +24,7 @@ class AuthCest
$userId = $I->grabDataFromJsonResponse('userId'); $userId = $I->grabDataFromJsonResponse('userId');
$I->assertNotEmpty($token); $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); $I->assertEquals($user->id, $loggedIn->id);
} }
@@ -45,7 +45,7 @@ class AuthCest
$userId = $I->grabDataFromJsonResponse('userId'); $userId = $I->grabDataFromJsonResponse('userId');
$I->assertNotEmpty($token); $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); $I->assertEquals($user->id, $loggedIn->id);
} }