Can you show the entire db.py, default py and index.html? Jim
On Fri, Oct 26, 2018, 1:44 AM Rahul <rahul.dhak...@gmail.com> wrote: > Nope - doesnt help. I commented out all the user functions defined in the > controller and > > > # ---- User functions --- > '''def login(): return dict(form=auth.login()) > def register(): return dict(form=auth.register()) > def retrieve_password(): return dict(form=auth.reset_password()) > def logout(): return dict(form=auth.logout()) > def profile(): return dict(form=auth.profile()) > ''' > > I even decorated index - It does take me to the login screen but from > there nothing happens. It just wont log me in like it did before. Also, I > have two users in database but none work now. Again, register seems to > fail (It did work earlier) but now it doesnt. See screenshot of both > screens. Looks like I must be really doing something weird. If this wont > work by this Sunday. I may go back to my old style of coding and do it all > by myself. I've seriously lost 10 days reading and experimenting with Auth > to make it work . Not too much coded. > > @auth.requires_login() > def index(): > response.flash = T("Hello User") > #redirect(URL(r=request, c='default/user', f='login')) # Redirects > user to login page > return dict(message=T('Welcome to web2py!')) > > > > Thanks, > > Rahul > > > > On Thursday, October 25, 2018 at 6:02:45 PM UTC+5:30, Jim S wrote: >> >> Having the default user() functions is all you need. I'd try commenting >> out your 'user' functions. >> >> -Jim >> >> On Wednesday, October 24, 2018 at 10:59:45 PM UTC-5, Rahul wrote: >>> >>> Yes this is in default.py. Please excuse me for my bad code as I am >>> still experimenting with Auth and not totally familiar with the >>> implementation. Is this the right way that I am doing it? or only having >>> user() function is enough ? >>> >>> Thanks, Rahul >>> >>> On Wednesday, October 24, 2018 at 9:45:21 PM UTC+5:30, Jim S wrote: >>>> >>>> I'm confused. Is this code in your controller somewhere? >>>> >>>> # ---- User functions --- >>>> def login(): return dict(form=auth.login()) >>>> def register(): return dict(form=auth.register()) >>>> def retrieve_password(): return dict(form=auth.reset_password()) >>>> def logout(): return dict(form=auth.logout()) >>>> def profile(): return dict(form=auth.profile()) >>>> >>>> You shouldn't need it. To override the default login stuff I've just >>>> modified the one in default.py. >>>> >>>> -Jim >>>> >>>> >>>> >>>> On Tuesday, October 23, 2018 at 11:26:45 PM UTC-5, Rahul wrote: >>>>> >>>>> The user function remains as-is - No modifications done. >>>>> >>>>> def user(): >>>>> """ >>>>> exposes: >>>>> http://..../[app]/default/user/login >>>>> http://..../[app]/default/user/logout >>>>> http://..../[app]/default/user/register >>>>> http://..../[app]/default/user/profile >>>>> http://..../[app]/default/user/retrieve_password >>>>> http://..../[app]/default/user/change_password >>>>> http://..../[app]/default/user/bulk_register >>>>> use @auth.requires_login() >>>>> @auth.requires_membership('group name') >>>>> @auth.requires_permission('read','table name',record_id) >>>>> to decorate functions that need access control >>>>> also notice there is http://..../[app]/appadmin/manage/auth to >>>>> allow administrator to manage users >>>>> """ >>>>> return dict(form=auth()) >>>>> >>>>> I am using the specified functions to expose methods as below - >>>>> # ---- User functions --- >>>>> def login(): return dict(form=auth.login()) >>>>> def register(): return dict(form=auth.register()) >>>>> def retrieve_password(): return dict(form=auth.reset_password()) >>>>> def logout(): return dict(form=auth.logout()) >>>>> def profile(): return dict(form=auth.profile()) >>>>> >>>>> >>>>> >>>>> and the corresponding files reside in \views\ *not in* >>>>> \views\default - I am not sure if the application is even picking up these >>>>> files. >>>>> >>>>> Note - I have extended the Auth (auth_user) table and added workspace >>>>> and other fields - This will be specified everytime I add a new user. I >>>>> would filter out the results as you mentioned but only after all the login >>>>> stuff works properly. >>>>> >>>>> auth.settings.extra_fields['auth_user'] = [ >>>>> Field ('workspace', length=128), >>>>> >>>>> Sincerely, >>>>> >>>>> Rahul >>>>> >>>>> On Tuesday, October 23, 2018 at 7:49:48 PM UTC+5:30, Jim S wrote: >>>>>> >>>>>> Did you modify the user() function in default.py? Or, are you using >>>>>> your own custom login functions? >>>>>> >>>>>> -Jim >>>>>> >>>>>> On Tuesday, October 23, 2018 at 7:59:21 AM UTC-5, Rahul wrote: >>>>>>> >>>>>>> Hi Jim, All, >>>>>>> Okay I tried this - And I also decorated index() function >>>>>>> in controller like below as I want to redirect the user to login page >>>>>>> rather than directly jumping to index.html >>>>>>> >>>>>>> # ---- example index page ---- >>>>>>> @auth.requires_login() >>>>>>> def index(): >>>>>>> response.flash= T("Hello World") >>>>>>> return dict(message=T('Welcome to web2py!')) >>>>>>> >>>>>>> However, now when I put the credentials username and password, it >>>>>>> doesnt log me in - I generates the below URL like below and appends it >>>>>>> to >>>>>>> url box. What might I be missing because it was logging me in fine >>>>>>> sometime >>>>>>> ago but now it doesnt allow. Note I did cleanup a lot of HTML code from >>>>>>> my >>>>>>> login page. There sure is something going on here that I am not >>>>>>> catching - >>>>>>> >>>>>>> >>>>>>> >>>>>>> http:// >>>>>>> 127.0.0.1:8000/scaffolding_app/default/user/login?username=rahul&password=integer10&_next=%2Fscaffolding_ace_admin%2Fdefault%2Findex&_formkey=0c0c022a-377d-47dd-bd72-a13e8ee6f387&_formname=login >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> Sincerely, Rahul D. >>>>>>> >>>>>>> >>>>>>> On Friday, October 19, 2018 at 12:24:19 PM UTC+5:30, Rahul wrote: >>>>>>>> >>>>>>>> Hi Jim, >>>>>>>> That makes sense. I will check it out on which option to >>>>>>>> go. Thanks! for all the guidance. >>>>>>>> >>>>>>>> Thank you, >>>>>>>> >>>>>>>> *Rahul Dhakate* >>>>>>>> >>>>>>>> On Wednesday, October 17, 2018 at 7:57:32 PM UTC+5:30, Jim S wrote: >>>>>>>>> >>>>>>>>> Rahul >>>>>>>>> >>>>>>>>> First, what I was referring to was common_filters, not common >>>>>>>>> fields. Here is the scenario as I see it. >>>>>>>>> >>>>>>>>> In you auth_user table you have a workspace field. Then in other >>>>>>>>> tables that are workspace-specific you also have a workspace field to >>>>>>>>> show >>>>>>>>> which workspace they relate to >>>>>>>>> >>>>>>>>> Here is how I think I would handle it, assuming I am understanding >>>>>>>>> your need. And, assuming that the workspace identifier is stored on >>>>>>>>> the >>>>>>>>> user record. You wouldn't gather it on the login page. >>>>>>>>> >>>>>>>>> In db.py I'd have code that would check to see if the user is >>>>>>>>> logged in. If so, then set the common filters for the >>>>>>>>> workspace-specific >>>>>>>>> tables >>>>>>>>> >>>>>>>>> if auth.is_logged_in: >>>>>>>>>> db.related_table_1._common_filter = lambda query: >>>>>>>>>> db.related_table_1.workspace = auth.user.workspace >>>>>>>>>> db.related_table_2._common_filter = lambda query: >>>>>>>>>> db.related_table_2.workspace = auth.user.workspace >>>>>>>>>> db.related_table_3._common_filter = lambda query: >>>>>>>>>> db.related_table_3.workspace = auth.user.workspace >>>>>>>>>> db.related_table_4._common_filter = lambda query: >>>>>>>>>> db.related_table_4.workspace = auth.user.workspace >>>>>>>>>> ...etc... >>>>>>>>> >>>>>>>>> >>>>>>>>> Make sense? >>>>>>>>> >>>>>>>>> Anyone else out there that's done this and can show a better way? >>>>>>>>> >>>>>>>>> -Jim >>>>>>>>> >>>>>>>>> >>>>>>>>> NOTE - you might also skip the common filters if you're logging in >>>>>>>>> as an admin. Then you might want to see data for all workspaces >>>>>>>>> >>>>>>>>> NOTE 2 - If you really want people to specify their workspace when >>>>>>>>> they login (meaning they have access to all of them but they choose >>>>>>>>> which >>>>>>>>> one on login) then you'd have to override the default login code to >>>>>>>>> gather >>>>>>>>> that extra variable and store it in your session somewhere. Then use >>>>>>>>> that >>>>>>>>> instead of auth.user.workspace when building your filters. >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Wed, Oct 17, 2018 at 2:06 AM Rahul <rahul....@gmail.com> wrote: >>>>>>>>> >>>>>>>>>> Hi Jim, >>>>>>>>>> I am afraid no I didn't check that section but I just >>>>>>>>>> finished reading it. Thanks! for directing me to it. Looks like a new >>>>>>>>>> addition to DAL (might be a couple of versions back) & looks >>>>>>>>>> promising. So >>>>>>>>>> now, we can specify something like request_tenant using >>>>>>>>>> db._common_fields >>>>>>>>>> field parameter. >>>>>>>>>> >>>>>>>>>> I would need it for all tables so is there a specific syntax like >>>>>>>>>> below that I am required to specify in each table I create ? >>>>>>>>>> >>>>>>>>>> db._common_fields.append(Field('request_tenant', >>>>>>>>>> default=request.env.http_host, >>>>>>>>>> writable=False)) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Also, can we set the default value to a field value that we can >>>>>>>>>> query or pass as a session variable like session.workspace == 'some >>>>>>>>>> workspace name' while the user logs in ? >>>>>>>>>> >>>>>>>>>> default=session.workspace, >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> If yes - what do I need to modify to add this additional field in >>>>>>>>>> Auth so it will be an input field for the user to key in the >>>>>>>>>> workspace >>>>>>>>>> name. Then I can store this workspace in session variable and use >>>>>>>>>> it. The >>>>>>>>>> reason is I want a group of users (accessing the same app and >>>>>>>>>> database from >>>>>>>>>> different locations) belonging to same workspace. This is how they >>>>>>>>>> are >>>>>>>>>> grouped. please see the screenshot posted from my actual application >>>>>>>>>> login. >>>>>>>>>> In it I use workspace name as well to validate but after reading the >>>>>>>>>> book >>>>>>>>>> seems like we would not require workspace for validation if we can >>>>>>>>>> have the >>>>>>>>>> user provide the field for redirection and for us to grab the session >>>>>>>>>> variable. >>>>>>>>>> >>>>>>>>>> Or is this not needed at all after we use common fields ? >>>>>>>>>> >>>>>>>>>> I hope I am clear and make sense :-) >>>>>>>>>> >>>>>>>>>> Regards, >>>>>>>>>> >>>>>>>>>> Rahul >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Tuesday, October 16, 2018 at 7:49:49 PM UTC+5:30, Jim S wrote: >>>>>>>>>>> >>>>>>>>>>> Have you looked at common filters? >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer?search=common+filter#Common-filters >>>>>>>>>>> >>>>>>>>>>> -Jim >>>>>>>>>>> >>>>>>>>>>> On Tuesday, October 16, 2018 at 7:35:04 AM UTC-5, Rahul wrote: >>>>>>>>>>>> >>>>>>>>>>>> Hey Everyone, >>>>>>>>>>>> Greetings! I have a question. I went through Auth >>>>>>>>>>>> documentation and understood that we can add extra fields to the >>>>>>>>>>>> Auth >>>>>>>>>>>> tables. However, I still want to be a little more clear to achieve >>>>>>>>>>>> below - >>>>>>>>>>>> I am currently using three fields for a multi-tenant system like >>>>>>>>>>>> workspace, >>>>>>>>>>>> username and password. Here workspace depicts where the user >>>>>>>>>>>> belongs to >>>>>>>>>>>> (see explanation in Q1 below) I am currently using my own code to >>>>>>>>>>>> manage >>>>>>>>>>>> this stuff manually (almost everything that auth does), now though >>>>>>>>>>>> I want >>>>>>>>>>>> to give Auth a try and tailor it to fit my needs. I dont want to >>>>>>>>>>>> maintain >>>>>>>>>>>> that amount of code and use the existing API. Can I get help on >>>>>>>>>>>> achieving >>>>>>>>>>>> that in the simplest way. If it works, I would switch to using Auth >>>>>>>>>>>> >>>>>>>>>>>> * Q1]* How can we use Auth to add one more extra field for >>>>>>>>>>>> authentication when I want a system to validate login based on >>>>>>>>>>>> three >>>>>>>>>>>> parameters like - Validation needs to be done based on all three >>>>>>>>>>>> parameters >>>>>>>>>>>> specified. For each application I can use 'n' number of unique >>>>>>>>>>>> workspaces >>>>>>>>>>>> and 'n' number of users would belong to these workspaces. How to >>>>>>>>>>>> do this ? >>>>>>>>>>>> >>>>>>>>>>>> 1. *workspace *- An alpha numeric field that would store a >>>>>>>>>>>> unique name denoting users belonging to a particular set (For >>>>>>>>>>>> example >>>>>>>>>>>> users working in a specific location like los-angeles or >>>>>>>>>>>> washington) or >>>>>>>>>>>> an office location like michigan, nevada or Zones like north, >>>>>>>>>>>> south .. >>>>>>>>>>>> sort-of etc. ) >>>>>>>>>>>> 2. *username *- Its available already >>>>>>>>>>>> 3. *password *- Its available already >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> *Q2]* Which all tables need to be modified ? >>>>>>>>>>>> >>>>>>>>>>>> *Q3] *Any changes in any other code in any files ? >>>>>>>>>>>> >>>>>>>>>>>> I know I can clone my app multiple times and support >>>>>>>>>>>> multi-tenancy however, if this can be achieved with Auth - that >>>>>>>>>>>> would be >>>>>>>>>>>> great. >>>>>>>>>>>> >>>>>>>>>>>> Regards, >>>>>>>>>>>> >>>>>>>>>>>> *Rahul * >>>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>> Resources: >>>>>>>>>> - http://web2py.com >>>>>>>>>> - http://web2py.com/book (Documentation) >>>>>>>>>> - http://github.com/web2py/web2py (Source code) >>>>>>>>>> - https://code.google.com/p/web2py/issues/list (Report Issues) >>>>>>>>>> --- >>>>>>>>>> You received this message because you are subscribed to a topic >>>>>>>>>> in the Google Groups "web2py-users" group. >>>>>>>>>> To unsubscribe from this topic, visit >>>>>>>>>> https://groups.google.com/d/topic/web2py/6SscBvMorU0/unsubscribe. >>>>>>>>>> To unsubscribe from this group and all its topics, send an email >>>>>>>>>> to web2py+un...@googlegroups.com. >>>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>>> >>>>>>>>> -- > Resources: > - http://web2py.com > - http://web2py.com/book (Documentation) > - http://github.com/web2py/web2py (Source code) > - https://code.google.com/p/web2py/issues/list (Report Issues) > --- > You received this message because you are subscribed to a topic in the > Google Groups "web2py-users" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/web2py/6SscBvMorU0/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > web2py+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.