Php 尝试在Laravel 4.2中为GET route而不是POST创建身份验证视图 编辑:

Php 尝试在Laravel 4.2中为GET route而不是POST创建身份验证视图 编辑:,php,post,laravel,get,laravel-routing,Php,Post,Laravel,Get,Laravel Routing,我发现,当URL相同时,POST-one就不会被使用。填充表单会将用户重定向到auth视图,即使其方法设置为POST。这就好像是将form方法设置为GET,或者我定义了一个路由::any到该URL。我都没有。仔细检查 我仍然认为没有理由发生这种情况 主要问题: 因此,我的应用程序中有一个视图,只有拥有特定密码(而不是用户密码)和特定电子邮件的用户才能访问该视图。为了实现这一点,我在另一个视图中放置了一个表单(每个人都可以访问),并创建了一个发布路线,如下所示: teamv5.blade.php

我发现,当URL相同时,POST-one就不会被使用。填充表单会将用户重定向到auth视图,即使其方法设置为POST。这就好像是将form方法设置为GET,或者我定义了一个
路由::any
到该URL。我都没有。仔细检查

我仍然认为没有理由发生这种情况


主要问题: 因此,我的应用程序中有一个视图,只有拥有特定密码(而不是用户密码)和特定电子邮件的用户才能访问该视图。为了实现这一点,我在另一个视图中放置了一个表单(每个人都可以访问),并创建了一个发布路线,如下所示:

teamv5.blade.php 因此,如果密码是正确的,并且用户的电子邮件是授权访问该视图的电子邮件,那么它就会工作,并且信息会传递给控制器

现在,问题是:我不想让除了那个特定用户之外的任何人看到这个视图,所以我为任何试图在浏览器中简单键入URL的人创建了一个GET路由。该路由应该创建一个身份验证视图,提示用户填写必要的信息。这是控制器:

TeamController.php 最后,发生的是:

  • 如果我为GET和POST路由编写相同的URL,GET-one可以工作,但在
    teamv5.blade.php
    中填写第一个表单后,用户将被重定向到auth视图,并被提示再次键入信息(不太好)
  • 如果我写了不同的URL或者只是注释了GET路由,POST-one可以完美地工作,但是当我尝试重新加载页面或者通过URL访问页面时,我得到了HTTP方法NOT ALLOWED错误(因为,当然,没有为该URL写GET路由)
  • 我希望用户能够访问它的两种方式,如果可能的话。我知道我做了很长时间,对不起。任何帮助都将不胜感激


    提前谢谢

    我看不出这里有什么问题。如果密码不正确,那么您必须再次将用户重定向到表单,这样,如果他犯了一些错误,他这次可以更正它。你能解释一下你遇到了什么问题吗(也许可以举个例子)?@itachi我会在问题上补充一些我今天发现的额外细节。@itachi问题不是让他纠正错误。即使他正确地填写了所有内容,他仍然会得到auth屏幕,就好像POST路由没有正常工作一样。auth表单也重定向到自身,表明它正在使用GET方法。这看起来像是路由问题,但没有理由。您确定身份验证成功吗?据我猜测,laravel和sentry的哈希机制可能不同,因此,即使输入正确的密码,身份验证也总是失败。@itachi我会检查一下,但可能不是这样,因为我已经尝试过操作post函数。我没有将用户重定向到同一页面,而是返回'fail'仅用于测试目的,甚至不起作用(当然,在尝试验证之前)。这种方法似乎总是因为某种原因而被采用。我不知所措。
             <form action="{{ URL::route('team-update-v5-post', array('v5',$team_v5->teamname)) }}" method='post'>
                    <p>Team password: {{ $team_v5->teamname }}</p>
                    <input type='password' name='password'>
                    <input type='hidden' name='email' value="{{ Sentry::getUser()->email }}">
                    <input type='submit' value='Edit'>
                    {{ Form::token(); }}
            </form>
    
     Route::post('/sentry/team/{v}/{teamname}/edit', array(
            'as'    => 'team-update-v5-post',
            'uses'  => 'TeamController@postUpdateV5'
     ));
    
     Route::get('/sentry/team/{v}/{teamname}/edit', array(
            'as'    => 'team-update-v5',
            'uses'  => 'TeamController@getUpdateV5'
      ));
    
        public function getUpdateV5 ($v,$teamname) {
    
                return View::make('team.auth')
                        ->with('v',$v)
                        ->with('teamname',$teamname);
        }
    
        public function postUpdateV5($v,$teamname) {
    
                $validator = Validator::make(Input::all(), array(
                                'password'      => 'required|min:6',
                                'email'         => 'required|email',
                ));
    
                if($validator->fails()) {
    
                        return Redirect::route('team-update-v5',array('v5',$teamname))
                                ->withErrors($validator);
                } else {
                        $team_v5 = DB::table('teams_v5')->where('teamname',$teamname)->first();
                        $captain_v5 = Sentry::findUserById($team_v5->captain_id);
    
                        if(Hash::check(Input::get('password'), $team_v5->password)) {
                                return View::make('team.updatev5')
                                        ->with('team_v5', $team_v5)
                                        ->with('captain_v5',$captain_v5)
                         } else {
    
                                return Redirect::route('profile-team',array($v,$teamname))
                                        ->with('global','Incorrect password!');
                        }
                }
        }