mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Add support for redirecting to the requested page after login
This commit is contained in:
parent
bb77009f44
commit
d88bcb48d7
2 changed files with 24 additions and 13 deletions
|
@ -47,8 +47,9 @@ const ConnectionRequired: FunctionComponent<ConnectionRequiredProps> = ({
|
||||||
if (location.pathname === BounceRoutes.Login) {
|
if (location.pathname === BounceRoutes.Login) {
|
||||||
setIsLoading(false);
|
setIsLoading(false);
|
||||||
} else {
|
} else {
|
||||||
console.debug('[ConnectionRequired] not logged in, redirecting to login page');
|
console.debug('[ConnectionRequired] not logged in, redirecting to login page', location);
|
||||||
navigate(`${BounceRoutes.Login}?serverid=${connectionResponse.ApiClient.serverId()}`);
|
const url = encodeURIComponent(location.pathname + location.search);
|
||||||
|
navigate(`${BounceRoutes.Login}?serverid=${connectionResponse.ApiClient.serverId()}&url=${url}`);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case ConnectionState.ServerSelection:
|
case ConnectionState.ServerSelection:
|
||||||
|
|
|
@ -20,13 +20,13 @@ import { getDefaultBackgroundClass } from '../../../components/cardbuilder/cardB
|
||||||
|
|
||||||
const enableFocusTransform = !browser.slow && !browser.edge;
|
const enableFocusTransform = !browser.slow && !browser.edge;
|
||||||
|
|
||||||
function authenticateUserByName(page, apiClient, username, password) {
|
function authenticateUserByName(page, apiClient, url, username, password) {
|
||||||
loading.show();
|
loading.show();
|
||||||
apiClient.authenticateUserByName(username, password).then(function (result) {
|
apiClient.authenticateUserByName(username, password).then(function (result) {
|
||||||
const user = result.User;
|
const user = result.User;
|
||||||
loading.hide();
|
loading.hide();
|
||||||
|
|
||||||
onLoginSuccessful(user.Id, result.AccessToken, apiClient);
|
onLoginSuccessful(user.Id, result.AccessToken, apiClient, url);
|
||||||
}, function (response) {
|
}, function (response) {
|
||||||
page.querySelector('#txtManualPassword').value = '';
|
page.querySelector('#txtManualPassword').value = '';
|
||||||
loading.hide();
|
loading.hide();
|
||||||
|
@ -44,7 +44,7 @@ function authenticateUserByName(page, apiClient, username, password) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function authenticateQuickConnect(apiClient) {
|
function authenticateQuickConnect(apiClient, targetUrl) {
|
||||||
const url = apiClient.getUrl('/QuickConnect/Initiate');
|
const url = apiClient.getUrl('/QuickConnect/Initiate');
|
||||||
apiClient.ajax({ type: 'POST', url }, true).then(res => res.json()).then(function (json) {
|
apiClient.ajax({ type: 'POST', url }, true).then(res => res.json()).then(function (json) {
|
||||||
if (!json.Secret || !json.Code) {
|
if (!json.Secret || !json.Code) {
|
||||||
|
@ -77,7 +77,7 @@ function authenticateQuickConnect(apiClient) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = await apiClient.quickConnect(data.Secret);
|
const result = await apiClient.quickConnect(data.Secret);
|
||||||
onLoginSuccessful(result.User.Id, result.AccessToken, apiClient);
|
onLoginSuccessful(result.User.Id, result.AccessToken, apiClient, targetUrl);
|
||||||
}, function (e) {
|
}, function (e) {
|
||||||
clearInterval(interval);
|
clearInterval(interval);
|
||||||
|
|
||||||
|
@ -108,9 +108,9 @@ function authenticateQuickConnect(apiClient) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function onLoginSuccessful(id, accessToken, apiClient) {
|
function onLoginSuccessful(id, accessToken, apiClient, url) {
|
||||||
Dashboard.onServerChanged(id, accessToken, apiClient);
|
Dashboard.onServerChanged(id, accessToken, apiClient);
|
||||||
Dashboard.navigate('home.html');
|
Dashboard.navigate(url || 'home.html');
|
||||||
}
|
}
|
||||||
|
|
||||||
function showManualForm(context, showCancel, focusPassword) {
|
function showManualForm(context, showCancel, focusPassword) {
|
||||||
|
@ -192,6 +192,18 @@ export default function (view, params) {
|
||||||
return ApiClient;
|
return ApiClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getTargetUrl() {
|
||||||
|
if (params.url) {
|
||||||
|
try {
|
||||||
|
return decodeURIComponent(params.url);
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('[LoginPage] unable to decode url param', params.url, err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return '/home.html';
|
||||||
|
}
|
||||||
|
|
||||||
function showVisualForm() {
|
function showVisualForm() {
|
||||||
view.querySelector('.visualLoginForm').classList.remove('hide');
|
view.querySelector('.visualLoginForm').classList.remove('hide');
|
||||||
view.querySelector('.manualLoginForm').classList.add('hide');
|
view.querySelector('.manualLoginForm').classList.add('hide');
|
||||||
|
@ -216,7 +228,7 @@ export default function (view, params) {
|
||||||
context.querySelector('#txtManualName').value = '';
|
context.querySelector('#txtManualName').value = '';
|
||||||
showManualForm(context, true);
|
showManualForm(context, true);
|
||||||
} else if (haspw == 'false') {
|
} else if (haspw == 'false') {
|
||||||
authenticateUserByName(context, getApiClient(), name, '');
|
authenticateUserByName(context, getApiClient(), getTargetUrl(), name, '');
|
||||||
} else {
|
} else {
|
||||||
context.querySelector('#txtManualName').value = name;
|
context.querySelector('#txtManualName').value = name;
|
||||||
context.querySelector('#txtManualPassword').value = '';
|
context.querySelector('#txtManualPassword').value = '';
|
||||||
|
@ -226,8 +238,7 @@ export default function (view, params) {
|
||||||
});
|
});
|
||||||
view.querySelector('.manualLoginForm').addEventListener('submit', function (e) {
|
view.querySelector('.manualLoginForm').addEventListener('submit', function (e) {
|
||||||
appSettings.enableAutoLogin(view.querySelector('.chkRememberLogin').checked);
|
appSettings.enableAutoLogin(view.querySelector('.chkRememberLogin').checked);
|
||||||
const apiClient = getApiClient();
|
authenticateUserByName(view, getApiClient(), getTargetUrl(), view.querySelector('#txtManualName').value, view.querySelector('#txtManualPassword').value);
|
||||||
authenticateUserByName(view, apiClient, view.querySelector('#txtManualName').value, view.querySelector('#txtManualPassword').value);
|
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
@ -236,8 +247,7 @@ export default function (view, params) {
|
||||||
});
|
});
|
||||||
view.querySelector('.btnCancel').addEventListener('click', showVisualForm);
|
view.querySelector('.btnCancel').addEventListener('click', showVisualForm);
|
||||||
view.querySelector('.btnQuick').addEventListener('click', function () {
|
view.querySelector('.btnQuick').addEventListener('click', function () {
|
||||||
const apiClient = getApiClient();
|
authenticateQuickConnect(getApiClient(), getTargetUrl());
|
||||||
authenticateQuickConnect(apiClient);
|
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
view.querySelector('.btnManual').addEventListener('click', function () {
|
view.querySelector('.btnManual').addEventListener('click', function () {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue