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:
@@ -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
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
@@ -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'),
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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();
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user