用户注册和登录
打赏作者

2477466

顶.

sonics34

这个里面可以加入正则验证吗?
protected function validator(array data) { return Validator::make(data, [
‘name’ => ‘required|max:255’,
‘email’ => ‘required|email|max:255|unique:users’,
‘password’ => ‘required|confirmed|min:6’,
]);
}

Flyerboy

支持

mailman

我看了两遍,不是很明白。好多的文件不知道在那里??

mailman

这些方法在那里。

JellyBool

只要是有验证的地方都可以使用正则 @sonics34

JellyBool

你没看命名空间么?

use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;

文件在vendor/laravel/framework/src/illuminate/Foundation/Auth/这个文件夹里面 @mailman

sonics34

注册可以限制次数吗,碰到机器恶意注册该怎么防范

JellyBool

这个貌似laravel自带的就有防范。 @sonics34

apsana

Auth 分离 前台和后台用户 怎么实现?

oryjk

你好,我的ide下载了laravel和blade的插件,但是我输入ftext然后tab健,却没有出来你视频中自动填充的东西,而是,请问这个怎么解决呢?谢谢

JellyBool

你看看phpstorm系列的live template

perfectboook

我根据教程,做到注册这一步,都填完后,点击注册会报错:

PDOException in Connector.php line 55:
SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'localhost' (using password: YES)

我是在本地做的,.env文件确认已经设置正确 的数据库连接,migration也可以正常的执行。

JellyBool

我怎么咋看都是数据库的密码和用户没有配置正确啊。。。 @perfectboook

perfectboook

。。。我也很纳闷,我在任何一个controller里面的任何一个方法写上

dd(app()['config']['database']['connections']['mysql']);

都会返回:

array:9 [▼
  "driver" => "mysql"
  "host" => "localhost"
  "database" => "homestead"
  "username" => "homestead"
  "password" => "secret"
  "charset" => "utf8"
  "collation" => "utf8_unicode_ci"
  "prefix" => ""
  "strict" => false
]

但是,如果这段代码在tinker里面运行,返回的就是正确的。。 @JellyBool

perfectboook

好了,没有问题了。我重启了一下php artisan serve,就好了。看来还是自己本地搭个网站才靠谱些。。 @JellyBool

JellyBool

为什么会出现这个问题?理论上不用重新执行 php artisan serve的啊。。。anyway,很喜欢你这样问问题的态度 @perfectboook

perfectboook

哈哈,我自己都没感觉我有什么态度。。 @JellyBool

licaikai

@JellyBool 为什么构造函数里面用不了重定向

axhello

@JellyBool 跟着教程做到了最后,填写了表单然后提交为啥不会跳转呢?也没有报路由错误,而且数据库也没有写入呢?

JellyBool

是哪里写错了吧。。。 @axhello , 你看看php的构造函数吧 @licaikai

icediv

@axhello 建议你把之前视频中的 errors.list 加入到你的view里,有可能是你密码输入少于6位,这个错误我刚犯完

axhello

@icediv 是的!没错,昨天我也发现原来是不符合规则才这样的,密码输长一点就没问题了

AGuier

我用了 mongodb 拓展包。 配合原生Auth 为什么登陆的时候没反应呢?

现在有反应了提示

huigezizj 回复 AGuier

我也是的,你是怎么解决的?

(1/1) FatalThrowableError
Type error: Argument 1 passed to Illuminate\Auth\SessionGuard::login() must be an instance of Illuminate\Contracts\Auth\Authenticatable, instance of App\Http\Model\User given, called in D:\wamp64\www\blog\vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php on line 34

cheng

假如我要改变登陆的视图地址,我该怎么办

cxt5118

在文件 AuthenticatesUsers.php 中的getLogin方法里return “ddddddddddd”;为什么会报错呢
报错:Whoops, looks like something went wrong.

getLogin方法:
public function getLogin()
{
return “ddddddddd”;
}

cxt5118

@axhello 解决了没,和你遇到了同样的问题

lovezsl2
ErrorException in Guard.php line 430:
Argument 1 passed to Illuminate\Auth\Guard::login() must be an instance of Illuminate\Contracts\Auth\Authenticatable, instance of App\Geo\Model\Users given

看到这个视频,超过5遍了,根据视频的讲解,使用auth模块能够实现登陆注册
然后自己就做了个新的注册和登陆
登陆没问题,注册的入库也没有问题,但是在入库成功后使用Auth::login($user)就报这个错误,看到laravel的中文社区里也有这样的一个问题,回复的是使用Author::attempt来进行登陆,我做了测试,这样是可以登陆的,而且我的登陆就是使用的这种方法,现在就在纠结Auth::login为什么会报这样的错误,@JellyBool

dd($user);
Users {#254 ▼
  #table: "users"
  #fillable: array:4 [▶]
  #connection: null
  #primaryKey: "id"
  #perPage: 15
  +incrementing: true
  +timestamps: true
  #attributes: array:8 [▶]
  #original: array:8 [▶]
  #relations: []
  #hidden: []
  #visible: []
  #appends: []
  #guarded: array:1 [▶]
  #dates: []
  #dateFormat: null
  #casts: []
  #touches: []
  #observables: []
  #with: []
  #morphClass: null
  +exists: true
  +wasRecentlyCreated: false
}

http://wenda.golaravel.com/question/449

JellyBool

你的User是什么样的,贴出来看看。。有空看看Markdown呗,这样代码好看很多 @lovezsl2

lovezsl2

@JellyBool 代码就是这样,登录和非登录访问权限,我放到了全局middleware里了
过滤了注册,登陆,退出

<?php

namespace App\Http\Controllers\User;


use App\Geo\Model\Users;
use App\Geo\Model\UserLoginRetry;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Carbon\Carbon;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Illuminate\Hashing\BcryptHasher;
use Illuminate\Support\Facades\Session;

class UserController extends Controller
{
    /**
     * 获取登陆页面,判断是否已经登陆
     */
    public function getLogin()
    {
        session::flash('aaa','aaaa');
        return view('auth.login');
    }

    /**
     * 登录过滤条件
     * @param array $data
     */
    protected function loginValidator(array $data)
    {
        return Validator::make($data, [
            'username' => 'required|max:255|min:3|alpha_num',
            'password' => 'required|min:3|max:16|alpha_num',
        ]);
    }
    /**
     * 登录
     * @param Request $request
     * @return Ambigous <\Illuminate\Routing\Redirector, \Illuminate\Http\RedirectResponse, mixed, \Illuminate\Foundation\Application, \Illuminate\Container\static>
     */
    protected function postLogin(Request $request)
    {
        //过滤
        //查看用户是否存在
        //存在判断5分内密码是否3次错误
        //3次内执行登录
        //登录失败,记录密码错误
        $validator = $this->loginValidator($request->all());
        if ($validator->fails()) {
            $this->throwValidationException(
                $request, $validator
            );
        }
        $user = Users::username($request->input('username'))->first();
        
        if(isset($user)){
            if(count($user->retry()->where('created_at','>=',Carbon::now()->subMinutes(5))->get()) >=3){
                return '密码错误3次,5分钟后登录';
            }
            if (Auth::attempt(['username' => $request->input('username'), 'password' => $request->input('password')]))
            {
                return redirect('/home');
            }
            UserLoginRetry::create(['users_id'=>$user->id]);
        }
        return redirect('/auth/login');
    }
    /**
     * 注册过滤条件
     * @param array $data
     */
    protected function registerValidator(array $data){
        return Validator::make($data, [
            'username' => 'required|max:255|min:3|alpha_num|unique:users',
            'password' => 'required|confirmed|min:8|max:16|alpha_num',
            'status' => 'required',
            'permission' => 'required'
        ]);
    }
    /**
     * 获取注册页面,判断是否已经登录
     * @return Ambigous <\Illuminate\Routing\Redirector, \Illuminate\Http\RedirectResponse, mixed, \Illuminate\Foundation\Application, \Illuminate\Container\static>|Ambigous <\Illuminate\View\View, \Illuminate\Contracts\View\Factory, mixed, \Illuminate\Foundation\Application, \Illuminate\Container\static>
     */
    protected function getRegister(){
        Session::put('bbb','bbb');
        //return view('auth.register');
    }
    /**
     * 注册,成功后登录
     * @param Request $request
     * @return Ambigous <\Illuminate\Routing\Redirector, \Illuminate\Http\RedirectResponse, mixed, \Illuminate\Foundation\Application, \Illuminate\Container\static>
     */
    protected function postRegister(Request $request){
        $validator = $this->registerValidator($request->all());
        if ($validator->fails()) {
            $this->throwValidationException(
                $request, $validator
            );
        }
        $this->create($request->all());
        if(Auth::attempt(['username' => $request->input('username'), 'password' => $request->input('password')])){
            return redirect('/home');
        }
        //Auth::login($this->create($request->all()));
        return redirect('/auth/login');
    }
    
    /**
     * 退出
     * @return Ambigous <\Illuminate\Routing\Redirector, \Illuminate\Http\RedirectResponse, mixed, \Illuminate\Foundation\Application, \Illuminate\Container\static>
     */
    protected function getLogout(){
        Auth::logout();
        return redirect('/auth/login');
    }
    
    /**
     * 保存注册数据,加密密码
     * @param array $data
     * @return Ambigous <\Illuminate\Database\Eloquent\static, \App\Geo\Model\Users>
     */
    protected function create(array $data){
        return Users::create([
            'username' => $data['username'],
            'password' => bcrypt($data['password']),
            'status' => $data['status'],
            'permission' => $data['permission'],
        ]);
    }
}
JellyBool

算了,每次都要我编辑一次,等别人来看看吧 @lovezsl2

nashJG

博主。你有没有试过将表中的name字段换成其他的。我下的最新的laravel5.1,users表中的事username字段。 我把register表中的name置成username,提交注册时候显示验证错误:“the name field is required”。
但是我把users中的字段修改成name,register中也用name就没有问题了。我搞不清楚是为什么

JellyBool

你可以看看这个,https://laravist.com/discussion/195 不知道能否解决你的问题 @nashJG

nashJG

@JellyBool 问题已经解决了,谢谢博主。原因是因为我的表中的字段是username,而验证规则里的键是name。 初学者,找问题比较慢。。。

JellyBool

没事,有问题就问呗 @nashJG

237552032

Form::password
password的问题,Form::text 没问题 有人遇到过吗

237552032

ok,好了

mordic10 回复 237552032

怎么解决的呢,请教下

xiangang 回复 mordic10

使用{!! Form::input(‘password’,‘password’,null,[‘class’=>‘form-control’]) !!} 可以解决

_xurong

jellly,如果在登录状态,不执行logout,直接再在地址填/auth/login,会报错

请问这是怎么回事?

_xurong

你好,我还想知道表单错误后怎么报错,例如邮箱重复无法注册:相同的邮箱第二次注册,点击注册没有反应。我希望做一个错误提示,还请站长有空教一教

Rain Wu

点击注册后,页面刷新,POST请求发出,Status 200, 但是数据库users表始终没有插入数据。 页面也没有redirect。 貌似postRegister这个方法也没有触发。 可否告知为啥呢?

Rain Wu

搞定了,sorry,打扰了

鸡仔食饭米

protected $redirectPath = ‘/articles’;

定义了这个,就会跳转到articles页面,这个是什么原理?

jiji262

live template可以共享么
比如支持bootstrap的

JellyBool

已共享,你看看呗 @jiji262 https://laravist.com/discuss/289

yijiang

@JellyBool 我用的php集成环境。有时间链接地址出错。就要 artisan serve 一下 就好了这是什么情况?

仰望黯月之空

点击注册后,页面刷新,POST请求发出,Status 200, 但是数据库users表始终没有插入数据。 页面也没有redirect。 貌似postRegister这个方法也没有触发。 请问是为什么呢,谢谢

仰望黯月之空


我的代码 找不出问题

imydou

laravel 5.2
php artisan make:auth
一切搞定

xuan9230

Hi, 大神,又来问你了:

我用migration建了一张表“students”,然后auth.php也修改过model和table了,但是注册的时候它一直提示错误:

QueryException in Connection.php line 636: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'unimates_db.users' doesn't exist (SQL: select count(*) as aggregate from `users` where `email` = docker@transwarp.io)

这个指的是它原来自带的users那张表吧?我早删了阿,auth.php也改过了,为什么还提示这个错误呢?
已经搞了2个小时了这个错误就是不消失。。

xuan9230

又砸了两个小时,终于知道问题了……
建model的时候默认用artisan migrate:model它只能生成最简单的model,没有implements任何东西(authenticable等等),这样搞我只会每一步都是错。。
不过我确认官网文档那一页我读的很仔细了,它没有提到这个,官网傻逼!

JellyBool

额,还行吧 @xuan9230

CXPJY

问一下 为什么这个视频看不了 就只有音频 没有视频画面?

JellyBool

我这是可以正常看的 @CXPJY

CXPJY

从migration 以后的都是这样的 这是为什么 刚刚学laravel 框架 觉得你讲的很不错 但是遇到了这个视屏问题 就没信心学下去了。。。

JellyBool

额。。这个我就不知道了 @CXPJY 你可以换个浏览器或者换个设备看看

JellyBool

你这是? @菁菁小铺

菁菁小铺

额。。这个我就不知道了 @CXPJY 你可以换个浏览器或者换个设备看看

彭壮猷

为虾米只要登录然后logout 都退不出来呢

JellyBool

这个应该是你哪里写错了吧 @彭壮猷

彭壮猷

我用的5.2,但是5.1 就可以,我也不知道为什么代码都一样@JellyBool

JellyBool

这尼玛,真的么。。。 @彭壮猷

彭壮猷

@JellyBool 解决好了,楼主,是我粗心大意了, 麻烦到你了

JellyBool

行。解决问题就好 @彭壮猷

xuexier

楼主我想问你两个问题,非常感谢:
1.为什么我的laravel运行不会产生cookie,我记得会产生的?
2.为什么我csrf_token()的值为null?

Nicksxs

@237552032 求问怎么解决的?

zyy

为什么。我登陆后,在退出,logout后,在手动地址栏输入:auth/login 和 auth/register 都是进入 laravel 的首页。关掉浏览器,在冲输入就可以了。
试了好几个浏览器了。

蓝月萧枫

你好,看了laravel -5.2的文档,对于那个用户验证看得不是很懂,如果我的用户表与laravel自带默认表不一样,那应该怎么修改代码?实在是看不懂才问的

JellyBool 回复 蓝月萧枫

自己实现登录和注册过程就行,users 表随意你怎么改。

蓝月萧枫 回复 JellyBool

自己改不用自带auth吗?

JellyBool 回复 蓝月萧枫

自带的 auth 是默认使用 email 和 password 字段认证的,照你说的情况应该不太适合你。

蓝月萧枫 回复 JellyBool

那自带那个不支持自定义吗?好像文档里没说明有,看得头都大了去

JellyBool 回复 蓝月萧枫

支持的,在你这种头都大的情况下,还是直接自己写吧。

zsq101123

为什么,登录中不能注册呢? 注册会跳转到 http://localhost/home? 我查了一下好像是走的 app\Http\Middleware\RedirectIfAuthenticated.php 这个类,里面有个handle方法,跳转的,不明白为什么会走到这个。

fubing005

老师的快速完成代码的快捷键是什么?

hhtvv

这软件叫什么

sunmyissocute

我把users 改成 user ,怎么把id 改成 uid

sunmyissocute

我的 token 没 进数据库啊

水云间chinahuanqiu

我的注册登录验证完跳转正常,为啥却没有存储进session呢,

水云间chinahuanqiu

搞定了,出来个新问题,为啥logout执行完无反应呢

yiyufxst 回复 水云间chinahuanqiu

你可以执行以下php artisan route:list看一下,Laravel5.3我使用的是自动配置auth,所以在路由表里,/logout只有post方式,没有在浏览器地址栏的get方式,所以在routes\web.php内添加Route::get('/logout', 'Auth\LoginController@logout'),把get方式的路由注册上

mirgong

为啥我访问logout退出不了呢?是什么原因?

xiaohj001 回复 mirgong

路由中注册的退出登录的方法名要和AuthController文件中构造函数里面调用的方法名一致

baronlam 回复 xiaohj001

这位小哥说的对,我在 laravel 5.2 中就遇到了相同的问题,在route路由中写的是getLogout(),但是却退出不了,原因就出在 AuthController 中的构造函数中,因为原 laravel 只指定了除logout方法之外进行请求就会跳转到指定的页面,你顺着AuthController 的构造函数继续深入看就知道了。

不是小韦的小维的小伟

这个视频的完整代码在哪 @JellyBool

JellyBool 回复 不是小韦的小维的小伟

没,视频一般也不提供代码

Swww18

我 user数据吧中用户名字段是username , 但是laravel中都是name,后来我把laravel中的name 都改成username,虽然可以提交到数据库中,但是用户名是空的,我把数据表中的username改成name,就可以成功提交,我想是不是除了,AuthController以及视图中的username,是不是还有其他的地方也有改字段名字啊?@JellyBool

xiangzhuyanfa

视频源码在哪下载

JellyBool 回复 xiangzhuyanfa

这个没有视频源码的,多敲代码吧

mysteryH

我把 protected $redirectPath=’/auth/login’; 改成这样,怎么还是跳到home去了

JellyBool 回复 mysteryH

这个具体看你 用的 laravel 版本

mysteryH 回复 JellyBool

用的是5.1的

JellyBool 回复 mysteryH

实在 AuthController 设置的吗?

protected $redirectPath = '/dashboard';
LWJ

重启一次 $ php artisan serve
才能到 auth/Login 界面。

Yangplus

我的app.blade.php文件里总是显示找不到这个css和这个js,自带的登录注册页面的css,js都加载不出来,这是什么毛病?

JellyBool 回复 Yangplus

基本上就是 Apache 或者 Nginx 没配置好吧

Yangplus 回复 JellyBool

开始的时候是没问题,突然一天就这样了。我在Apache中设置了虚拟主机,如下
<VirtualHost *:80>
ServerAdmin myname
DocumentRoot "SRVROOT/htdocs/laravel/public/index.php"ServerNamemyapp.comErrorLog"{SRVROOT}/htdocs/laravel/public/index.php" ServerName myapp.com ErrorLog "{SRVROOT}/htdocs/laravel/myapp.com-error.log"
CustomLog “SRVROOT/htdocs/laravel/myapp.comaccess.log"common<Directory"{SRVROOT}/htdocs/laravel/myapp.com-access.log" common <Directory "{SRVROOT}/htdocs/laravel/public”>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Require all granted


我不知道是不是URL重写的问题?求指教

JellyBool 回复 Yangplus

这就尴尬了,试试在命令行执行 php artisan storage:link

Yangplus 回复 JellyBool

找到错误了,虚拟主机DocumentRoot路径错了==

KylinJackson

Laravel5.4 貌似没有视频中的那几个文件

JellyBool 回复 KylinJackson

那些文件夹你创建对应的类就会生成

KylinJackson 回复 JellyBool

我还是不太懂 你视频里那些类也是自己创建的吗?

JellyBool 回复 KylinJackson

比如说,使用 artisan 生成一个自定义的 Request ,就会有 Request 文件夹了

KylinJackson 回复 JellyBool

具体怎么生成?

JellyBool 回复 KylinJackson

php artisan make:request

记得视频有说到

octopus

按了什么快捷键,一下出了一句代码

{!! Form::open(['url'=>'/auth/login']) !!}
JellyBool 回复 octopus

使用 PhpStorm 的 live template

huangwf

你好,首先是,我写好了登陆注册页面,然后在注册页面能注册成功,只是会自动跳转到首页,然后进去网址Logout退出,我写了protected $redirectPath=’/articles’; 进去AuthController.php,然后就发现进去登陆注册页面的时候,会自动跳转到首页,删除了那条语句也不行,查看文档是说修改protected $redirectTo的,我修改了重启服务器也不行,不知道哪里出错了,版本 5.2.45

JellyBool
protected $redirectPath=’/articles’;
protected  $redirectTo

这两个你确定改对了么?

huangwf 回复 JellyBool

设置对了,自从我访问auth/logout后,再访问注册登录页面就会直接跳转到主页,不知道为什么,重启之后也一样

huangwf 回复 JellyBool

authorize()我把返回值改成了false也一样,刚开始还以为是这个问题的

huangwf 回复 JellyBool

搞定了,在app\Http\Middleware\RedirectIfAuthenticated.php的handle()方法里面,修改跳转位置就行了,之前估计是执行logout方法也没退出,所以还是跳转到主页

stevedjyz
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Article; 
use Carbon\Carbon;

use App\Http\Requests\CreateArticleRequest; //一定要写,否则会和namespace混淆path

class ArticlesController extends Controller
{
    //return artilces
    public function index(){
        $articles = Article::latest()->published()->get(); //scopePublished的使用
        return view('articles.index')->with('articles', $articles);
    }

    public function show($id){
        $article=Article::findOrFail($id);
        return view('articles.show')->with('article', $article);
    }

    public function create(){
        return view('articles.create');
    }

    public function store(CreateArticleRequest $request){ 
        $input=$request->all();

        Article::create($input); // create自动过滤掉token

        return redirect('/articles');
    }

    public function edit($id){
        $article=Article::findOrFail($id);
        return view('articles.edit')->with('article', $article);
    }

    public function update(CreateArticleRequest $request){ //实现表单验证
        $article=Article::findOrFail($id);
        $article->update($request->all());

        return redirect('/articles');
    }

}
stevedjyz

为什么我的create页面总报错,无法将数据存入数据库,我是laravel 5.4,报错是:
Whoops, looks like something went wrong.
(2/2) ReflectionException
Class App\Http\Requests\CreateArticleRequest does not exist
in RouteSignatureParameters.php (line 25)
at ReflectionParameter->getClass()
in RouteSignatureParameters.php (line 25)

JellyBool 回复 stevedjyz

CreateArticleRequest 这个文件没有

stevedjyz

可是我有啊 确实在目录下
另外,我中间用5.4的php artisan make:auth创建了控制器和视图,但视图还是用的课程里的代码

JellyBool 回复 stevedjyz

那我就不知道了,看报错就是这样的:没有 CreateArticleRequest

雾霾公司

用户注册后跳回到了登陆界面 而且 数据 也没有传入到数据库

JellyBool 回复 雾霾公司

把相关代码和配置,环境贴出来看看?

雾霾公司

页面没有报错

mordic10

为啥我的password输入框加了样式但是页面上没显示出有样式
{!! Form::password(‘password’, null, [‘class’=>‘form-control’,‘placeholder’=>‘password’]) !!},
然后提交注册的时候出现The password confirmation does not match.是啥情况呢

JellyBool 回复 mordic10
{!! Form::password(‘password’, [‘class’=>‘form-control’,‘placeholder’=>‘password’]) !!}

大概是这样吧