使用Laravel开发社区 >> 实现用户登录 视频发布于 2015-11-01
微信里点“发现”,扫一下
二维码便可将本文分享至朋友圈。
if(Auth::attempt(array('email'=>$request->get('email'), 'password'=>$request->get('password'))))
一直返回false
怎么解决的?我的也是
你确定你的邮箱和密码是对应的和正确地么 @elijah523
我新注册了一个用户,然后登录,就好用
谢谢老师
问题解决了? @elijah523 ,解决了就OK
用户通过验证了 在 signin方法里 \Auth::check();为1 \Auth::user()->name;这个也能取到值 在app.blade.php中 \Auth::check()是false { Auth::user()->name };也取不到值并且这句报错
app.blade.php是使用Auth::check(),在signin方法里,你在哪里使用\Auth::user()->name,把你这几个部分的代码贴出来看看 @elijah523
app.blade.php
Auth::check()
\Auth::user()->name
Jelly, 你好,课程看完了有个写法不是很明白,在UserController中使用\Auth::attempt的时候加一个\是什么意思呢?在app.blade.php使用Auth::check的时候没有使用\。这个是命名空间的问题吗?
是命名空间的问题 @Lennon 你可以先看看OOP基础那块
我也不是很理解这块啊,为什么在app.blade.php文件中,会成功调用Auth::check()方法呀。laravel怎么找到的Auth这个类啊。
暂时你学这个系列的话,可以先跟着写。不然你可以先去看看 深入 laravel 核心的系列
@JellyBool 每次登陆成功之后跳转到首页都出现“laravel.dev 将您重定向的次数过多”的问题,导致页面无法访问,请问可能是什么情况呢。 这是我所有的路由
Route::resource('posts','PostsController'); Route::get('/user/register','UsersController@register'); Route::get('/user/login','UsersController@login'); Route::post('/user/login','UsersController@signin'); Route::get('/verify/{confirm_code}','UsersController@confirmEmail'); Route::resource('user','UsersController'); Route::get('/', 'HomeController@index');
你的 laravel 版本是多少?你的:
Route::get('/', 'HomeController@index');
的 middleware 是什么,这个基本上就是 middleware 的问题引起的
@JellyBool 我的版本号是 5.2.45 ,HomeController的middleware 是
public function __construct() { $this->middleware('guest'); }
我尝试注释掉了这个middleware,问题解决了,请问什么原因呢。
middleware('guest') 就是未登录的用户才访问的页面,你一登录进来就直接使用户跳转到login页面,但是用户已经登录进来了,又需要跳转到 /,这样循环跳转,就出问题了
middleware('guest')
/
1.我想说我看了文档上面的记住我的功能,他给的代码我有个疑问:
if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) { // 这个用户被记住了... }
前面两个变量是post表单传来的数据,第三个$remember如果也是传过来的,那么这个是一个怎样的字符串啊!我猜想的是数据库的remember_token,但是用户都没有登录怎么可能传token呢?难道是一个用户将check选中后传到控制器的是一个bool值么?然后在控制器里进行操作? 2.继续问一个,我想问问题的时候如果去社区发个帖子你那边有提醒吗?因为在这边发布自己问题你回复的比较快!
$remember = $request->has('remember') ? true : false; if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) { // 这个用户被记住了... } if (Auth::viaRemember()) { //判断用户是否使用 remember_me 登录 }
2.发帖是有提示的。
return redirect(’/user/login’)->withInput(); 我故意输错密码,但是刷新后的页面并么有把之前填写邮箱返回到页面上。
return redirect(’/user/login’)->withInput();
确保你正确设置 session ,还是直接贴你的 controller 和 视图的代码吧
<div class="form-group"> <label for="inputPassword3" >密码</label> <input type="password" name="password" class="form-control" id="inputPassword3" placeholder="密码"> </div> <div class="form-group"> <div class=""> <button type="submit" class="form-control btn btn-default">登录</button> </div> </div> </form>
Controller 代码 public function signin(Requests\UserLoginRequest $request) {
if (Auth::attempt([ 'email'=>$request->get('email'), 'password'=>$request->get('password'), 'is_confirmed'=>1 ])){ return redirect('/'); }else{ Session::flash('user_login_failed','密码不正确或邮箱不正确'); return redirect('/user/login')->withInput(['email'=>$request->get('email')]); } }
你试试这样:
<div class="form-group"> <label for="inputEmail3" >邮箱</label> <input type="email" name="email" value="{ old('email')}" class="form-control " id="inputEmail3" placeholder="邮箱"> </div>
可以了。thanks~
\Auth::attempt 这个方法在哪里看他的实现方法?可以自己写么?
\Auth::attempt
你是说源码?你看看 vendor/laravel/src/ 下面的 Auth 部分
如果修改User.php名称或者移动User.php,使用Auth::attempt会出现错误,怎么解决
修改你的 config/auth.php 的配置文件
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, // 这里修改为你的改过的 ],
奇怪我輸入的信箱跟密碼是對的~~~!!! 但卻一直說我錯誤… 這會是哪裡有問題呢?
我還把 email 跟 password 個別打回前端看,的確有值,值也正確,我密碼為 11111111 (8個1) 這一定不會打錯的~~可是還是一直報錯~找不太到為什麼@@
你确认一下密码在保存的时候有没有两次加密
看起來是很正常的加密一次存入資料庫~!
搞不懂為什麼@@找了幾個小時了~找不到問題!
你拿数据库这一段加密后的 password 使用 Hash::check 来跟明文密码检查一下。
下次在 github 发图片的时候,记得使用 markdown 格式,

不好意思下次我會注意~! 我剛剛試了Hash::check 一直回傳 false
後來我乾卻不加密去測試,也是回傳 false!! 不知道如何解決@@
我剛在測試了一下: 如果我 return $request->get(‘email’); 有值並正確!
反之 return Auth::attempt([‘email’ => $request->get(‘email’),]); 就回傳 false
這樣子的話有可能會是什麼原因呢? 不好意思一直發問打擾~!
PS:我不是用原生的 users table,我是另外創一個 admin_users table 我也有去改過 config/auth.php 的 provider,結果也是一樣~!
剛剛試了Hash::check 一直回傳 false
就是密码不多吧
請問密碼不多是什麽意思?
密码不对。。。Hash::check() 都是 false
後來我整個砍掉,重新做一次,完全用 laravel 預設的
1.加密拿掉 2.用原生users table 最後一步到登入輸入信箱和密碼 一樣還是報錯~~我已經不知道怎解這個問題了!
额。。这么奇怪。
有注意过表的大小写么?
@JellyBool 終於解決掉此問題!!!! 我在此總結一下~~!
1:問題出在 laravel 對於 password 這個 key name 有強制性! 也就是說,即使存入DB的時候是明碼,但在做 login 時,laravel會自動把它轉成加密後才去比對, 因此永遠都不會比對正確.
2.至於一開始的方法加密後在儲存,並且一直在login報錯,後來這幾天我再照著您教學試又正常了, 估計可能我前幾次手誤或是漏了哪邊吧,才會導致一直 login 報錯的狀況,真是抱歉~!
可以可以,问题解决了就OK
你是怎么解决的,重点在这里
我也遇到了类似的情况,总是验证不对
@EddyAnn 你好:
我當初的狀況是因為我在註冊的時候 password 沒有加密就寫進去 table, laravel 的 Auth 對於 password 這部分似乎不予許這樣做, 所以解決方法就是在註冊的時候 password 必須要加密過後才寫進去 table,程式碼如下:
public function postRegister(Request $request) { if (Admin::where('email', $request->email)->first()) { return '此信箱已經被註冊'; } Admin::create([ 'name' => $request->name, 'email' => $request->email, 'password' => bcrypt($request->password) ]); return redirect('admin'); }
這樣在登入的時候就可以正常了~!