-
Notifications
You must be signed in to change notification settings - Fork 133
Bug: beforeLoginUrl is not stored in session if a user is logged out while in a protected group route. #798
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
The explanation was complete. Thanks for the full explanation.
I've always had trouble with adding documentation for the user to do something.😀
Another thing is that I have seen in the forum that people are looking for prioritizing the apply of filters, I don't know if this feature has been added, but if not, it seems that such a possibility is useful. |
Yes, if filters can be prioritised, then this wouldn't be an issue. |
@sammyskills beforeLoginUrl not working at all (tested in codeigniter 4.4.0 after updating ci4) e.g
but when visit http://localhost/dashboard we have the session store value
bit if I login then I will redirected to $redirects['login'] instead of beforeLoginUrl Iam using Shiled (dev-develop 63891c7) have you test it? |
Why did you exclude |
the
it is still ignoring |
@mshannaq I just updated a sample project from 4.3.7 to 4.4.0, and it works. Can you confirm that you have the updated Lines 410 to 416 in b6d327d
|
ooops , I forgot to modify app/Config/Auth.php :) thanks alot working now after updating app/Config/Auth.php |
I sent PR to change filter exec order. |
PHP Version
7.4
CodeIgniter4 Version
4.3.7
Shield Version
develop
Which operating systems have you tested for this bug?
Windows
Which server did you use?
apache
Database
MariaDB 10.4.18
Did you customize Shield?
No.
What happened?
There seems to be a problem with the merged PR #793.
As it stands, the entrance URL will only be filled if the route is protected by the session filter directly, as seen here:
shield/src/Filters/SessionAuth.php
Lines 78 to 81 in 970c67e
This looks and works fine if the pages of an application are protected using the configuration below in the app/Config/Filters.php file:
A challenge arises when the application contains protected URLs for different user groups. For example, users:
users/dashboard
, admin:admin/dashboard
. To make sure that users cannot access URLs they are not permitted, we apply the group filters:group:user
andgroup:admin
respectively. This would not have been a problem, but AFAIK, CI does not yet support arguments in filters via app/Config/Filters.php file, but it can be done via routes, in the app/Config/Routes.php file (see docs), like so:With the configurations in the filter and routes, when we run
php spark filter:check get users/dashboard
, we get the following:From the output above, it means that if a user's session expired while trying to visit the
users/dashboard
page, there will be no temporary URL stored in the session, for redirection after logging in. This is because thegroup
filter will run first, before thesession
filter. The AbstractAuthFilter redirects to the login page if a user is not logged in, before checking for the group:shield/src/Filters/AbstractAuthFilter.php
Lines 32 to 34 in 970c67e
A workaround is to add the filters (session and group) in the routes config file, but from CI docs, it is strongly discouraged as it breaks backward compatibility:
Steps to Reproduce
Add this to the GroupFilterTest:
Expected Output
I expected that the entrance URL is stored in the session before logging out an unauthorized user.
Anything else?
There are two possible solutions I am looking at:
The text was updated successfully, but these errors were encountered: