May I implement Auth by myself? Actually,I do not know how to write a controller for the homepage.
I used three components in the UsersController.php: public $components = array('Session','Security', 'Cookie'); 在 2012年9月9日星期日UTC-5下午8时25分37秒,Greg写道: > > Why are you doing it that way and not just using the Auth component? > Auth component basically magics up all of that stuff for you.... > > > http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html > > point that at a table with a username and password field and you're set > (more or less). > > I'd suggest perhaps that the security component isn't being turned on by > the controller generating the home page - where it looks like it is on the > users controller... users controller is expecting the security bits which > are not available at the time the form is being generated. > > > > On Mon, Sep 10, 2012 at 11:11 AM, shyandsy <shya...@gmail.com<javascript:> > > wrote: > >> Pretty sure! >> >> home.ctp >> .................... >> <?php >> echo $this->element('LoginForm'); >> ?> >> ..................... >> >> element/LoginForm.ctp >> <?php >> echo $this->Form->create('User', array('url' => array('controller' => >> 'users', 'action' => 'login'))); >> echo $this->Form->input('username'); >> echo $this->Form->input('password'); >> echo $this->Form->end('登录系统'); >> ?> >> >> >> UsersController.php >> >> public function login() >> { >> if($this->request->is('post')) >> { >> $result = $this->User->findByUsernameAndPassword( >> $this->data['User']['username'], >> $this->data['User']['password']); >> if($result) >> { >> $credential = Security::generateAuthKey(); >> //将凭据更新到数据库 >> $this->request->data['User']['credential'] = $credential; >> $this->User->id = $result['User']['id']; >> $this->User->save($this->request->data); >> $this->Session->setFlash('登录认证成功'); >> //设置cookie >> $this->Cookie->write('Users.username', $this->data['User']['username']); >> $this->Cookie->write('Users.credential', $credential); >> $this->redirect(array('action'=>'index')); >> } >> else >> { >> $this->Session->setFlash('登录认证失败'); >> } >> } >> } >> >> 在 2012年9月9日星期日UTC-5下午6时40分34秒,Greg写道: >>> >>> can you post the code? >>> >>> >>> On Mon, Sep 10, 2012 at 1:45 AM, shyandsy <shya...@gmail.com> wrote: >>> >>>> It doesn't work. >>>> The submit can not find the controller. >>>> >>>> I compared the different between 127.0.0.1/user/login and 127.0.0.1 . >>>> >>>> This is the login form in the login page: >>>> <form action="/users/login" id="UserLoginForm" method="post" >>>> accept-charset="utf-8"> >>>> <div style="display:none;"> >>>> <input type="hidden" name="_method" value="POST"/> >>>> <input type="hidden" name="data[_Token][key]" value=" >>>> f9da31eb2cd89c4e9c10af7**156a36f6bc9ae7fdd" id="Token1312017746"/> >>>> </div> >>>> <div class="input text required"> >>>> <label for="UserUsername">Username</**label> >>>> <input name="data[User][username]" maxlength="40" type="text" id=" >>>> UserUsername"/> >>>> </div> >>>> <div class="input password required"> >>>> <label for="UserPassword">Password</**label> >>>> <input name="data[User][password]" type="password" id="UserPassword"/> >>>> </div> >>>> <div class="submit"> >>>> <input type="submit" value="登录系统"/> >>>> </div> >>>> <div style="display:none;"> >>>> <input type="hidden" name="data[_Token][fields]" value=" >>>> e44df0d754a25ad586a8cb2**0d5d0ead3d4e78843%3A" id="TokenFields287192969 >>>> "/> >>>> <input type="hidden" name="data[_Token][unlocked]" value="" id=" >>>> TokenUnlocked1990315235"/> >>>> </div> >>>> </form> >>>> >>>> This is the login form element in the homepage >>>> <form action="/users/login" id="displayForm" method="post" >>>> accept-charset="utf-8"> >>>> <div style="display:none;"> >>>> <input type="hidden" name="_method" value="POST"/> >>>> </div> >>>> <div class="input text"> >>>> <label for="username">Username</**label> >>>> <input name="data[username]" type="text" id="username"/> >>>> </div> >>>> <div class="input password"> >>>> <label for="password">Password</**label> >>>> <input name="data[password]" type="password" id="password"/> >>>> </div> >>>> <div class="submit"> >>>> <input type="submit" value="login"/> >>>> </div> >>>> </form> >>>> >>>> Obviously, The login form in user/login page has been assign some staff >>>> like token, but element is not. >>>> >>>> 在 2012年9月6日星期四UTC-5下午7时10分03秒,**Greg写道: >>>>> >>>>> Thats fine. >>>>> >>>>> The solution for using elements is fairly straight forward. Build your >>>>> Controller and your model *as normal* - so your Users controller has a >>>>> login method. >>>>> >>>>> Next, create a new element under View/Elements called "LoginForm.ctp". >>>>> >>>>> The login form would look something like this: >>>>> >>>>> <php >>>>> >>>>> echo $this->Form->create(null, array('url' => array('controller' => >>>>> 'Users', 'action' => 'login'))); >>>>> // ... rest of the form >>>>> echo $this->Form->end('login'); >>>>> ?> >>>>> >>>>> back over in your home.ctp file you put this where you want the login >>>>> form to be visible: >>>>> >>>>> <?php >>>>> echo $this->element('LoginForm'); >>>>> ?> >>>>> >>>>> and you're done - the home page will now have the content from >>>>> LoginForm.ctp which will correctly submit the form data to the login >>>>> action >>>>> on the Users controller. >>>>> >>>>> You can of course then reuse the LoginForm element anywhere you like - >>>>> say the user navigates directly to /Users/login you could dump the login >>>>> form element on that page. Or say you wanted it in the header for every >>>>> page, modify the layout to include the element. >>>>> >>>>> You don't *have* to associate every action with a specific view for >>>>> that controller/action combination - it is often quite beneficial to drop >>>>> reusable forms into elements so that you can reuse them over and over >>>>> again. It helps with maintenance as well because if you modify the form >>>>> element, you are modifying it in all places in your site at once instead >>>>> of >>>>> having to go and modify every template/view that contains it. >>>>> >>>>> >>>>> On Fri, Sep 7, 2012 at 8:08 AM, shyandsy <shya...@gmail.com> wrote: >>>>> >>>>>> Got it, I already know the difference between reply on here and reply >>>>>> to your mailbox. >>>>>> >>>>>> >>>>>> 在 2012年9月5日星期三UTC-5上午2时45分34秒,**Gr**eg写道: >>>>>> >>>>>>> You don't use a view. Make an element to start with under >>>>>>> views/elements. >>>>>>> Call it loginForm.ctp or something. >>>>>>> >>>>>>> Then define an action in the form helper create call to point it at >>>>>>> the right controller/action >>>>>>> >>>>>>> On Wednesday, September 5, 2012, shyandsy wrote: >>>>>>> >>>>>>>> Hi, thanks for your anwser firstly. >>>>>>>> >>>>>>>> I have tried the method of element. >>>>>>>> I can load the login view that were written in the >>>>>>>> view/users/login.ctp, >>>>>>>> but I do not know how to process the POST request by >>>>>>>> UsersController.login()? >>>>>>>> >>>>>>>> I can not find the detail description on the cookbook 2.0. >>>>>>>> >>>>>>>> >>>>>>>> 在 2012年9月4日星期二UTC-5下午7时09分33秒,**Gr****eg写道: >>>>>>>>> >>>>>>>>> I'd do it with an element personally. Have the home page retrieve >>>>>>>>> the data from the models in question then pass the resulting data to >>>>>>>>> individual elements... >>>>>>>>> >>>>>>>>> requestAction is a major performance hit, especially if you are >>>>>>>>> not caching the results...and on the home page as described here you >>>>>>>>> are >>>>>>>>> looking at subjecting your users to 3 calls to the dispatcher (one >>>>>>>>> for >>>>>>>>> pages, one for news, one for users). >>>>>>>>> >>>>>>>>> You *can* use requestAction and elements together, then cache the >>>>>>>>> element to reduce the hit if you wish. >>>>>>>>> >>>>>>>>> >>>>>>>>> On Wed, Sep 5, 2012 at 5:06 AM, Mark Wratten <ma...@trimar.com>wrote: >>>>>>>>> >>>>>>>>>> I am assuming you have a route that routes to a specific >>>>>>>>>> controller/action, e.g. pages controller, index action. >>>>>>>>>> Then in you home page view View/Pages/index.ctp - >>>>>>>>>> >>>>>>>>>> <p>Welcome to my home page.</p> >>>>>>>>>> >>>>>>>>>> <div id="news-summary"> >>>>>>>>>> <h2>News Summary></h2> >>>>>>>>>> <?php echo $this->requestAction('/news/**su******mmary'); ?> >>>>>>>>>> </div> >>>>>>>>>> >>>>>>>>>> <div id="login-form"> >>>>>>>>>> <?php echo $this->requestAction('users/**lo******gin'); ?> >>>>>>>>>> </div> >>>>>>>>>> >>>>>>>>>> Then, in your News controller, create and action - summary, and a >>>>>>>>>> view file summary.ctp. >>>>>>>>>> In your Users controller create action login (which should also >>>>>>>>>> handle the POST request when the user logs in) and a login.ctp view >>>>>>>>>> file. >>>>>>>>>> >>>>>>>>>> Then when the home page is rendered, the news summary and login >>>>>>>>>> forms will be displayed. >>>>>>>>>> >>>>>>>>>> Mark >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Monday, September 3, 2012 8:04:34 PM UTC-4, shyandsy wrote: >>>>>>>>>>> >>>>>>>>>>> could you put some details on, thanks a lot! >>>>>>>>>>> Making a home page that includes login and news list. >>>>>>>>>>> >>>>>>>>>>> I can write a view and controller for that job login or news >>>>>>>>>>> list, but I don't know how to make that things togerther!! >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> 在 2012年9月3日星期一UTC-5上午12时22分41秒,**M********ark Wratten写道: >>>>>>>>>>>> >>>>>>>>>>>> Easiest is to use requestAction() in the homepage view. >>>>>>>>>>>> >>>>>>>>>>>> On Thursday, August 30, 2012 4:26:12 PM UTC-4, shyandsy wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> I am kind of new guy on cakePhp. So the description as below: >>>>>>>>>>>>> >>>>>>>>>>>>> I hope to provide two function to users in the homepage, login >>>>>>>>>>>>> and news. >>>>>>>>>>>>> The login uses the view login and the controller >>>>>>>>>>>>> loginController, and the news uses the news view and >>>>>>>>>>>>> newscontroller. >>>>>>>>>>>>> The problem is how to put the two view in the home page. >>>>>>>>>>>>> >>>>>>>>>>>>> (apologize, my first language is not English, if you meet some >>>>>>>>>>>>> problem about grammar, I will try to fix it) >>>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>> Google Groups "CakePHP" group. >>>>>>>>>> To post to this group, send email to cake...@googlegroups.com. >>>>>>>>>> To unsubscribe from this group, send email to cake-php+u...@** >>>>>>>>>> googlegroups.com******. >>>>>>>>>> Visit this group at http://groups.google.com/**group****** >>>>>>>>>> /cake-php?hl=en-US<http://groups.google.com/group/cake-php?hl=en-US> >>>>>>>>>> . >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "CakePHP" group. >>>>>>>> To post to this group, send email to cake-php@googlegroups.com. >>>>>>>> To unsubscribe from this group, send email to cake-php+unsubscribe@ >>>>>>>> **googlegro****ups.com. >>>>>>>> Visit this group at http://groups.google.com/**group**** >>>>>>>> /cake-php?hl=en-US<http://groups.google.com/group/cake-php?hl=en-US> >>>>>>>> . >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "CakePHP" group. >>>>>> To post to this group, send email to cake...@googlegroups.com. >>>>>> To unsubscribe from this group, send email to cake-php+u...@** >>>>>> googlegroups.com**. >>>>>> Visit this group at http://groups.google.com/**group** >>>>>> /cake-php?hl=en-US <http://groups.google.com/group/cake-php?hl=en-US> >>>>>> . >>>>>> >>>>>> >>>>>> >>>>> >>>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "CakePHP" group. >>>> To post to this group, send email to cake...@googlegroups.com. >>>> To unsubscribe from this group, send email to cake-php+u...@** >>>> googlegroups.com. >>>> Visit this group at >>>> http://groups.google.com/**group/cake-php?hl=en-US<http://groups.google.com/group/cake-php?hl=en-US> >>>> . >>>> >>>> >>>> >>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "CakePHP" group. >> To post to this group, send email to cake...@googlegroups.com<javascript:> >> . >> To unsubscribe from this group, send email to >> cake-php+u...@googlegroups.com <javascript:>. >> Visit this group at http://groups.google.com/group/cake-php?hl=en-US. >> >> >> > > -- You received this message because you are subscribed to the Google Groups "CakePHP" group. To post to this group, send email to cake-php@googlegroups.com. To unsubscribe from this group, send email to cake-php+unsubscr...@googlegroups.com. Visit this group at http://groups.google.com/group/cake-php?hl=en-US.