Hi Dave and Jim, Please find the files in the zipped archive. I have added default.py, db.py, index.html and also layout file which I am converting to use with web2py. called ace.html. I have also attached the views\login.html file since I am extending this file specifically for login form as it is different than layout file. Let me know. Thanks!
Regards, Rahul On Friday, October 26, 2018 at 5:11:12 PM UTC+5:30, Jim S wrote: > > Can you show the entire db.py, default py and index.html? > > Jim > > > On Fri, Oct 26, 2018, 1:44 AM Rahul <rahul....@gmail.com <javascript:>> > 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+un...@googlegroups.com <javascript:>. >> 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.
<<attachment: files.zip>>
Title: Login Page - Application Name
Ace Application© Company Name |