1

I'm trying to make email optional when user signs up. Here is package. So I removed email' => 'required|email|unique:users', in this function:

public function signup(Request $request)
{
    $credentials = $request->all();
    $validator = Validator::make($credentials, [
        'name' => 'required',
        'email' => 'required|email|unique:users',
        'password' => 'required|min:6|confirmed',
        'password_confirmation' => 'required|min:3'
    ]);
    if ($validator->fails()) {
        throw new ValidationHttpException($validator->errors()->all());
    }
    try {
        $user = $this->users->create($request->except('roles', 'permissions'));
        if (!$user->id) {
            return $this->response->error('could_not_create_user', 500);
        }

        $hasToReleaseToken = Config::get('boilerplate.signup_token_release');
        if ($hasToReleaseToken) {
            return $this->login($request);

        }

        return $this->response->created();
    } catch (\Exception $e) {
        return $this->response->error($e->getMessage(), 500);
    }

}

then in config-boilerplate.php I also removed email:

'signup_fields_rules' => [
    'name' => 'required',  
    'email' => 'required|email|unique:users',///// this
    'password' => 'required|min:6'
],

But when I sign up I get this error :

"message": "Undefined index: email", "status_code": 500, "debug": { "line": 173, "file": "/Users/MyMac/Desktop/Project/laravel-5.3-boilerplate-api-jwt-vue2/vendor/dingo/api/src/Http/Response/Factory.php", "class": "Symfony\Component\HttpKernel\Exception\HttpException",

the route:

$api = app('Dingo\Api\Routing\Router');
$api->version('v1', function ($api) {
$api->post('auth/signup', 'App\Api\V1\Controllers\AuthController@signup');

Is there anything I need to disable to allow users sign-up with or without email ?

AlmoDev
  • 969
  • 2
  • 18
  • 46
  • Just out of curiosity how will users log in if they don't have an email? Basically how do you plan on authing them after the signup process? – kyle Jan 03 '17 at 21:53
  • I already have created a login method with a phone number @kyle – AlmoDev Jan 03 '17 at 21:58
  • 1
    Your SignupController is different from https://github.com/francescomalatesta/laravel-api-boilerplate-jwt/blob/master/app/Api/V1/Controllers/SignUpController.php – Antonio Carlos Ribeiro Jan 03 '17 at 22:48
  • opps it's actually this one https://github.com/sureshamk/laravel-5.3-boilerplate-api-jwt-vue2/blob/master/app/Api/V1/Controllers/AuthController.php – AlmoDev Jan 03 '17 at 22:51

1 Answers1

1

If you want to make email as optional field, just use sometimes|email See Docs. Try below code:

public function signup(Request $request)
{
    $credentials = $request->all();
    $validator = Validator::make($credentials, [
        'name' => 'required',
        'email' => 'sometimes|email',
        'password' => 'required|min:6|confirmed',
        'password_confirmation' => 'required|min:3'
    ]);
    if ($validator->fails()) {
        throw new ValidationHttpException($validator->errors()->all());
    }
    try {
        $user = $this->users->create($request->except('roles', 'permissions'));
        if (!$user->id) {
            return $this->response->error('could_not_create_user', 500);
        }

        $hasToReleaseToken = Config::get('boilerplate.signup_token_release');
        if ($hasToReleaseToken) {
            return $this->login($request);

        }

        return $this->response->created();
    } catch (\Exception $e) {
        return $this->response->error($e->getMessage(), 500);
    }

}

config-boilerplate.php

'signup_fields_rules' => [
    'name' => 'required',  
    'email' => 'sometimes|email',///// this
    'password' => 'required|min:6'
],
AddWeb Solution Pvt Ltd
  • 21,025
  • 5
  • 26
  • 57