You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-12-16 09:42:23 +03:00
Deprecate MatrixClient.login and replace with loginRequest (#4632)
`MatrixClient.login` has some very unintuitive behaviour where it stashes the access token, but not the device id, refresh token, etc etc, which led people to imagine that they had a functional `MatrixClient` when they didn't. In practice, you have to create a *new* `MatrixClient` given the `LoginResponse`. As the first step for sorting this out, this deprecates the broken method and replaces it with one that has sensible behaviour.
This commit is contained in:
committed by
GitHub
parent
b45d51a131
commit
ce60162827
@@ -8246,27 +8246,33 @@ export class MatrixClient extends TypedEventEmitter<EmittedEvents, ClientEventHa
|
|||||||
/**
|
/**
|
||||||
* @returns Promise which resolves to a LoginResponse object
|
* @returns Promise which resolves to a LoginResponse object
|
||||||
* @returns Rejects: with an error response.
|
* @returns Rejects: with an error response.
|
||||||
|
*
|
||||||
|
* @deprecated This method has unintuitive behaviour: it updates the `MatrixClient` instance with *some* of the
|
||||||
|
* returned credentials. Instead, call {@link loginRequest} and create a new `MatrixClient` instance using the
|
||||||
|
* results. See https://github.com/matrix-org/matrix-js-sdk/issues/4502.
|
||||||
*/
|
*/
|
||||||
public login(loginType: LoginRequest["type"], data: Omit<LoginRequest, "type">): Promise<LoginResponse> {
|
public login(loginType: LoginRequest["type"], data: Omit<LoginRequest, "type">): Promise<LoginResponse> {
|
||||||
return this.http
|
return this.loginRequest({
|
||||||
.authedRequest<LoginResponse>(Method.Post, "/login", undefined, {
|
...data,
|
||||||
...data,
|
type: loginType,
|
||||||
type: loginType,
|
}).then((response) => {
|
||||||
})
|
if (response.access_token && response.user_id) {
|
||||||
.then((response) => {
|
this.http.opts.accessToken = response.access_token;
|
||||||
if (response.access_token && response.user_id) {
|
this.credentials = {
|
||||||
this.http.opts.accessToken = response.access_token;
|
userId: response.user_id,
|
||||||
this.credentials = {
|
};
|
||||||
userId: response.user_id,
|
}
|
||||||
};
|
return response;
|
||||||
}
|
});
|
||||||
return response;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns Promise which resolves to a LoginResponse object
|
* @returns Promise which resolves to a LoginResponse object
|
||||||
* @returns Rejects: with an error response.
|
* @returns Rejects: with an error response.
|
||||||
|
*
|
||||||
|
* @deprecated This method has unintuitive behaviour: it updates the `MatrixClient` instance with *some* of the
|
||||||
|
* returned credentials. Instead, call {@link loginRequest} with `data.type: "m.login.password"`, and create a new
|
||||||
|
* `MatrixClient` instance using the results. See https://github.com/matrix-org/matrix-js-sdk/issues/4502.
|
||||||
*/
|
*/
|
||||||
public loginWithPassword(user: string, password: string): Promise<LoginResponse> {
|
public loginWithPassword(user: string, password: string): Promise<LoginResponse> {
|
||||||
return this.login("m.login.password", {
|
return this.login("m.login.password", {
|
||||||
@@ -8311,6 +8317,10 @@ export class MatrixClient extends TypedEventEmitter<EmittedEvents, ClientEventHa
|
|||||||
* @param token - Login token previously received from homeserver
|
* @param token - Login token previously received from homeserver
|
||||||
* @returns Promise which resolves to a LoginResponse object
|
* @returns Promise which resolves to a LoginResponse object
|
||||||
* @returns Rejects: with an error response.
|
* @returns Rejects: with an error response.
|
||||||
|
*
|
||||||
|
* @deprecated This method has unintuitive behaviour: it updates the `MatrixClient` instance with *some* of the
|
||||||
|
* returned credentials. Instead, call {@link loginRequest} with `data.type: "m.login.token"`, and create a new
|
||||||
|
* `MatrixClient` instance using the results. See https://github.com/matrix-org/matrix-js-sdk/issues/4502.
|
||||||
*/
|
*/
|
||||||
public loginWithToken(token: string): Promise<LoginResponse> {
|
public loginWithToken(token: string): Promise<LoginResponse> {
|
||||||
return this.login("m.login.token", {
|
return this.login("m.login.token", {
|
||||||
@@ -8318,6 +8328,20 @@ export class MatrixClient extends TypedEventEmitter<EmittedEvents, ClientEventHa
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a `POST /login` request to the server.
|
||||||
|
*
|
||||||
|
* If successful, this will create a new device and access token for the user.
|
||||||
|
*
|
||||||
|
* @see {@link MatrixClient.loginFlows} which makes a `GET /login` request.
|
||||||
|
* @see https://spec.matrix.org/v1.13/client-server-api/#post_matrixclientv3login
|
||||||
|
*
|
||||||
|
* @param data - Credentials and other details for the login request.
|
||||||
|
*/
|
||||||
|
public async loginRequest(data: LoginRequest): Promise<LoginResponse> {
|
||||||
|
return await this.http.authedRequest<LoginResponse>(Method.Post, "/login", undefined, data);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logs out the current session.
|
* Logs out the current session.
|
||||||
* Obviously, further calls that require authorisation should fail after this
|
* Obviously, further calls that require authorisation should fail after this
|
||||||
|
|||||||
Reference in New Issue
Block a user