我正在执行一个具有密码保护的视图。基本上,当您访问该资源时,您会看到一个视图,指示您需要输入密码。 正确的行为应该是
所以我的刀片服务器代码如下:
@if ($passedPassword = Session::get('passedPassword'))
...here goes the real/true view content
@else
<section class="questionnaire-questions">
<div>
<form
action="{{ route('questionnaire.password', ['questionnaire' => $questionnaire->id]) }}"
method="POST">
{{ csrf_field() }}
<h3 class="text-center">@lang('questionnaire.password.advice')<h3>
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
<div class="goal-input-group numeric">
<label>PASSWORD</label>
<input
style='visibility: visible;'
name="password"
type="password"
>
</div>
</div>
</div>
<div class="text-center">
<button type="submit" class="goal-btn goal-btn-lg goal-btn-artic-blue">@lang('questionnaire.password')</button>
</div>
</form>
</div>
</section>
@endif
该视图使用以下方法呈现:
public function show(Questionnaire $questionnaire) {
$data = [];
$data['questionnaire'] = $questionnaire;
\Session::flash('passedPassword', false);
return view('questionnaires.show', array('data' => $data));
}
在先前的方法中,我传递了passedPassword
,但找不到找到将其作为Flash变量传递的方法。如果有添加
return back()->with(array(
'passedPassword' => false
));
但是使用view方法,我将非常感谢您知道如何操作。
然后,当用户单击按钮时,我调用下一个函数:
public function password(Request $request, Questionnaire $questionnaire) {
if (strcmp($questionnaire->password, $request->input('password')) == 0) {
return back()->with(array(
'passedPassword' => false
));
}
}
但是,即使密码正确,我仍然可以看到密码视图,但flash / session变量从未到达视图。
我有什么想念的地方吗?
谢谢。
答案 0 :(得分:0)
正如Dan在评论中告诉我的那样,我将false设置为session变量的值。
因此,首先我在show方法期间删除了\Session::flash('passedPassword', false);
。
然后,我修改刀片的逻辑。就我而言,有时需要密码,有时则不需要。
@if (($passwordLength === 0) || ($passwordLength !== 0 && Session::has('passedPassword')))
这样,如果资源没有密码,我们会让用户通过。或者,如果它具有密码,并且还具有passedPassword变量,则还可以让用户看到内容。